在前端使用AJAX和WordPress插件样板(wppb.io)

时间:2016-04-11 作者:Sandra

我正在尝试做一个类似于后端的标记框,但用于前端。当用户在输入字段中键入时,我使用AJAX获取标记建议。

我过去在Wordpress中使用过AJAX,在主题等方面没有问题,但现在我正在尝试构建一个插件,因为它要复杂得多,所以我尝试以Wordpress插件样板(wppb.io)为基础,采用面向对象的方式。

但我不能用样板来工作。AJAX调用可以工作,但成功了:当函数(数据)应该返回“testing”时,它总是返回0,这让我觉得我的函数永远不会被调用。我已经做了好几个小时了,我看不出错误

这是我的代码:

/public/js/my-plugin-public。js公司

$(\'#my_plugin_tags\').keyup(function() {

    var user_input = $(this).val();
    var user_input_last = $.trim(user_input.split(\',\').pop());

    $.ajax({
        url: my-plugin.ajax_url,
        type: \'POST\',
        data: {
            \'user_input\': user_input_last
        },
        success:function(data) {
            console.log(data);
        },
        error: function(errorThrown){
            console.log(errorThrown);
        }
    });

});
/public/将我的插件分类为public。php

/**
 * Register the JavaScript for the public-facing side of the site.
 *
 * @since    1.0.0
 */
public function enqueue_scripts() {
    wp_enqueue_script( \'my-plugin-public\', plugin_dir_url( __FILE__)  . \'js/my-plugin-public.js\', array( \'jquery\' , $this->plugin_name ), $this->version, false );          
    wp_localize_script( \'my-plugin-public\', \'my-plugin\' , array( \'ajax_url\' => admin_url( \'admin-ajax.php\' ) ) );

}
/public/class我的插件类public。php

/**
  * Get tag suggestions from while user writes
  *
  * @since      1.0.0
  */

public function tags_autofill_function() {
    echo(\'Testing\');
}
/包括/分类我的插件。php

/**
 * Register all of the hooks related to the public-facing functionality
 * of the plugin.
 *
 * @since    1.0.0
 * @access   private
 */
private function define_public_hooks() {

    // Load CSS & Scripts
    $plugin_public = new My_Plugin_Public( $this->get_plugin_name(), $this->get_version() );

    $this->loader->add_action( \'wp_enqueue_scripts\', $plugin_public, \'enqueue_styles\' );
    $this->loader->add_action( \'wp_enqueue_scripts\', $plugin_public, \'enqueue_scripts\' );

    // Custom Class from My Plugin
    $plugin_class_public = new My_Plugin_Class_Public();

    $this->loader->add_action( \'wp_ajax_tags_autofill_function\', $plugin_class_public , \'tags_autofill_function\' );
    $this->loader->add_action( \'wp_ajax_nopriv_tags_autofill_function\', $plugin_class_public , \'tags_autofill_function\' );

}

1 个回复
最合适的回答,由SO网友:Bruno Cantuaria 整理而成

没有action 变量,该变量取决于要传递给Ajax的数据。这样,WordPress只向Ajax发送一个一般调用,该调用始终返回0。您必须将JS文件中的数据编辑为如下内容:

    data: {
        \'user_input\': user_input_last,
        \'action\': \'tags_autofill_function\'
    },

相关推荐

尝试在WordPress中实现AJAX注释,遇到WP错误

我试图在WordPress中为我的评论实现Ajax,使用this tutorial. 但我在将教程中的代码集成到自己的预构建主题时遇到了问题。问题是,我要么得到一个WP错误“检测到重复注释;看来你已经说过了!”或标准500错误。以下是我得到的:下面是我对ajax的评论。js文件如下所示: * Let\'s begin with validation functions */ jQuery.extend(jQuery.fn, { /* * check i