web-dev-qa-db-ja.com

プラグインを書かずにAjaxをテーマに組み入れる方法は?

さて、私はいくつかのAJAXをワードプレスのテーマで始めました。

1)テーマフレームワークから子テーマを作成しています。2)子テーマにはheader.php、index.php、functions.php、style.cssがあります(この段階で)

私のheader.phpに私は次のものがある(ところで:コードは http://codex.wordpress.org/AJAX_in_Plugins から適応されている):

<?php
    if( !is_admin() ) {
 add_action('wp_ajax_my_special_action', 'my_action_callback');
 add_action('wp_ajax_nopriv_my_special_action', 'my_action_callback');
 $_ajax = admin_url('admin-ajax.php');    
}
?>
<script type="text/javascript" >
jQuery(document).ready(function($) {

 var data = {
  action: 'my_special_action',
  whatever: 1234
 };

 jQuery.post('<?php echo($_ajax); ?>', data, function(response) {
  jQuery('#output').html('Got this from the server: ' + response);
 });

});
</script>
</head>

それでそれはすべてクールです - そしてそれは "サーバーからこれを得た:0"でページ上のOUTPUT divを更新します

私は "my_action_callback"と呼ばれるPHP関数が必要です - だから私のテーマのfunctions.phpに私は以下があります:

function my_action_callback() {

 $whatever = $_POST['whatever'];

 $whatever += 10;

    echo 'whatever now equals: ' . $whatever;

 die();
}

これは私のfunctions.phpの中で唯一の関数です

PHP関数が機能していることを確認するために、my_action_callback()をindex.phpに追加します - そして期待どおりに "whatever now equals:10"を出力します。

しかし、AJAXレスポンスは常に 'サーバーから取得:0'です。AjaxはPHP関数からレスポンスを受け取ることはありません。

エラーがないかどうかを確認するために.ajaxError()を追加してみました - いいえ。

私はPHP関数を私の他のプラグインに追加してみました - nope。

私はjQueryが私のためにAjaxのビットをやっていないことを何が足りないのですか?

前もって感謝します

3
keranm

それらのadd_action関数もあなたのfunctions.phpファイルに入れてください。それらがheader.phpにある場合、ヘッダーはAJAXにロードされないため、WordPressはそれらを登録しません。また、あなたはそのis_admin()チェックを必要としません。テーマのヘッダがadminに読み込まれることはありません。そのため、あなたの関数ファイルは次のようになるはずです。

add_action('wp_ajax_my_special_action', 'my_action_callback');
add_action('wp_ajax_nopriv_my_special_action', 'my_action_callback');
function my_action_callback() {

 $whatever = $_POST['whatever'];

 $whatever += 10;

    echo 'whatever now equals: ' . $whatever;

 die();
}

そして、テーマのヘッダファイルのその部分の始まりは、このようになっているはずです。

<?php
$_ajax = admin_url('admin-ajax.php');
?>
<script type="text/javascript" >
jQuery(document).ready(function($) {

それ以外は、あなたのコードはうまくいくように見えます!

6
John P Bloch