web-dev-qa-db-ja.com

を使う AJAX Wordpressプラグインボイラープレート(wppb.io)を使用したFrontEndでの作業

私はバックエンドのそれに似たタグボックスをやろうとしていますが、フロントエンドのために。ユーザーが入力フィールドに入力したときにタグの候補を表示するには、AJAXを使用します。

私はこれまでテーマなどで問題なくWordpressでAJAXを使用してきましたが、今はプラグインを作成しようとしています。 Wordpressのプラグインボイラープレート(wppb.io)をベースとした指向の方法。

しかし、定型を使ってそれをうまく動かすことはできません。 AJAX呼び出しは機能しますが、成功:function(data)は '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/class-my-plugin-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-my-plugin-class-public.php

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

public function tags_autofill_function() {
    echo('Testing');
}

/includes/class-my-plugin.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' );

}
2
Sandra

Ajaxに渡すデータにはaction変数はありません。このようにしてWordPressは常に0を返すAjaxへの一般的な呼び出しを送信しているだけです。JSファイルのデータを次のように編集する必要があります。

    data: {
        'user_input': user_input_last,
        'action': 'tags_autofill_function'
    },
3
Bruno Cantuaria