さて、私はいくつかの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のビットをやっていないことを何が足りないのですか?
前もって感謝します
それらの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($) {
それ以外は、あなたのコードはうまくいくように見えます!