私は新鮮なWPインストールを持っています、そして物事を単純に保つために私は現在私のfunctions.php
で以下のような単純なアクションをただ持っています:
function getFruits() {
return json_encode( ['fruits' => ['apples', 'pears']]);
}
function my_enqueue() {
wp_enqueue_script( 'ajax-script', get_template_directory_uri() . '/js/my-ajax-script.js', array('jquery') );
wp_localize_script( 'ajax-script', 'my_ajax_object',
array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
}
add_action( 'wp_enqueue_scripts', 'my_enqueue' );
さて、私の目的はJQuery/JavaScriptを使って私のwordpressエンドポイントをAJAX呼び出し、そしてランディングページをレンダリングするときに単にfruit jsonオブジェクトを戻してそれをコンソールに印刷することです。
これが私が試したことです。
twentyseventeen\js\my-ajax-script.js
:
$(document).ready(function() {
$.ajax(
{
type: "get",
data : {
action: 'getFruits'
},
dataType: "json",
url: my_ajax_object.ajax_url,
success: function(msg){
console.log(msg); //output fruits to console
}
});
});
現在、JQueryが定義されていないというエラーが発生していますが、キューに入れられているようです。第二に、私はこれまで正しくWP AJAXを使ったことがないので、これを正しく実装することすらできません。だから今、私の目的は基本的な例を動かすことです。これを達成する方法についての提案をいただければ幸いです。
ありがとうございました
WordPress AJAXはアクションを使ってjQueryのaction
を従来のWordPressのアクションと結びつけます。 WordPressが彼らのドキュメントで提供している の例を見てください 。 2つのフックがあります:
add_action( "wp_ajax_{$jquery_action_string}", "callback_function_name" );
上記は認証された(ログインされた)ユーザーに対してのみ機能します。ログインしていないユーザーにはnopriv
を使います。
add_action( "wp_ajax_nopriv_{$jquery_action_string}", "callback_function_name" );
したがって、私たちの場合は、両方を使用します。
function return_fruits() {
echo json_encode( ['fruits' => ['apples', 'pears']]);
exit();
}
add_action( 'wp_ajax_getFruits', 'return_fruits' );
add_action( 'wp_ajax_nopriv_getFruits', 'return_fruits' );
Ajaxアクションとコールバック名が同一である必要がないことを識別するために、コールバック関数名を変更しました。また、あなたはそれを返す代わりに echo このデータを使いたいでしょう。
あなたはあなたのjqueryアクションを実行するためにajaxアクションフックを使わなければなりません。
ログインユーザーの場合:
add_action('wp_ajax_getFruits', 'getFruits);
ログインしていないユーザーの場合:
add_action('wp_ajax_nopriv_getFruits', 'getFruits');
function get_fruits(){
$response = array('Fruits'=> ['banana', 'Apple']);
//use this function and make a response then send the response
wp_send_json_success(array('response'=>$response));
// by using wp_send_json_success() you don't need to exit and parse response
}