web-dev-qa-db-ja.com

add_action( 'wp_ajax_ [アクション名]'、myfunction)問題

私はWPコーデックスのガイドラインを使用してワードプレスにAjaxを統合しようとしています。 PHPに追加しました:

wp_enqueue_script ( 'my_ajax', ADMIN_URL . 'js/ajax.js','jquery','1.0.0' );
wp_localize_script( 'my_ajax', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );

Ajaxコードは次のとおりです。

jQuery.ajax({url: MyAjax.ajaxurl, type: "POST",data: {action: 'myaction',postID : MyAjax.postID}, success: function(response) {
 alert('Got this from the server: ' + response);
}});

そしてajaxが呼び出すべきPHP関数は次のとおりです。

function ajax_function() {
...do something...
}
add_action('wp_ajax_myaction', 'ajax_function');
add_action('wp_ajax_admin_myaction', 'ajax_function');

Ajax呼び出しは成功します( "alert"は機能します)が、php関数 "ajax_function"は呼び出されません。いくつかのデバッグをした後、add_action( 'wp_ajax_がグローバルな$ wp_filter配列に新しい要素を設定したとしても、対応するdo_actionがadmin-ajax.php内で実行されると、$ wp_filter配列にはその要素は含まれません.

したがって、 "ajax_function"関数は無視されます。なぜ関数が呼び出されないのですか?

4
user1567

私のプロジェクトでは、私はそれが好きです

PHP

function foo() {
    echo 'bar';
}
add_action('wp_ajax_foo', 'foo' ); // executed when logged in
add_action('wp_ajax_nopriv_foo', 'foo' ); // executed when logged out

ジャバスクリプト

data = { action: 'foo', avalue: 'some value', 'anothervalue': 'another value' };
jQuery.post(ajaxurl, data, function(response){
    alert(response);
});
4
Horttcore

コードに従ってください。

add_action( 'wp_ajax_add_myfunc', 'prefix_ajax_add_myfunc' );
add_action( 'wp_ajax_nopriv_add_myfunc', 'prefix_ajax_add_myfunc' );

function prefix_ajax_add_myfunc() {
    // Handle request then generate response using WP_Ajax_Response
}

そしてあなたのAjax呼び出しでこれを行います:

jQuery.post(
    ajaxurl, 
    {
        'action': 'add_myfunc',
        'data':   'foobarid'
    }, 
    function(response){
        alert('The server responded: ' + response);
    }
);

ajax呼び出しではprefix_ajax_なしで関数を呼び出します。それが残っているだけで呼び出します。その場合はadd_myfuncです。応答がすべてうまくいけばdoneを送ります。そうでなければ、0または-1になります。

それが役立つことを願っています。ありがとうございました。

1
Sajidur Rahman