私は、jQueryで通常の方法でajaxを使用することに慣れています。
しばらく試してみましたが、Wordpressが機能するために必要なものがわかりません...
ここにあるものは、いくつかのチュートリアルまたは記事から引用したものです。
これはfunctions.phpにあります(子テーマ内):
// code to load jquery - working fine
// code to load javascript file - working fine
// ENABLE AJAX :
function add_ajax()
{
wp_localize_script(
'function',
'ajax_script',
array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
}
$dirName = get_stylesheet_directory(); // use this to get child theme dir
require_once ($dirName."/ajax.php");
add_action("wp_ajax_nopriv_function1", "function1"); // function in ajax.php
add_action('template_redirect', 'add_ajax');
JQuery自体がロードされ、正常に動作しています。
私は次のようないくつかの基本的なajaxを試しました:
jQuery(document).ready(function($){
$('a.link').click(function(){
$.ajax({
url: ajax_script.ajaxurl,
data: ({action : 'function1'}),
success: function(data){
$('#result').html(data);
}
});
return false;
});
});
これに加えて、最初から正しくロードされているかどうかをテストする方法がわかりません...
ここで助けていただければ幸いです。
編集:
firebugでは、このエラー:
ReferenceError: ajax_script is not defined
url: ajax_script.ajaxurl,
あなたのリクエストに応じて、私はあなたの答えにこれを入れました。
Hieu Nguyenが答えで提案したように、ajaxurl javascript変数を使用してadmin-ajax.phpファイルを参照できます。ただし、この変数はフロントエンドで宣言されていません。これをフロントエンドで宣言するのは簡単です。テーマのheader.phpに次のものを追加します。
<script type="text/javascript">
var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>";
</script>
Wordpress AJAX のドキュメントで説明されているように、wp_ajax_(action)とwp_ajax_nopriv_(action)の2つの異なるフックがあります。これらの違いは次のとおりです。
他のすべては、上記のリンクされたドキュメントで説明されています。ハッピーコーディング!
追伸次に、shouldが機能する例を示します。 (テストしていません)
フロントエンド:
<script type="text/javascript">
jQuery.ajax({
url: ajaxurl,
data: {
action: 'my_action_name'
},
type: 'GET'
});
</script>
バックエンド:
<?php
function my_ajax_callback_function() {
// Implement ajax function here
}
add_action( 'wp_ajax_my_action_name', 'my_ajax_callback_function' ); // If called from admin panel
add_action( 'wp_ajax_nopriv_my_action_name', 'my_ajax_callback_function' ); // If called from front end
?>
[〜#〜] update [〜#〜]これは古い答えですが、人々から親指を上げ続けているようです-これは素晴らしいです!これは一部の人々に役立つと思います。
WordPressには、関数 wp_localize_script があります。この関数は、次のような変換を目的とした3番目のパラメーターとしてデータの配列を受け取ります。
var translation = {
success: "Success!",
failure: "Failure!",
error: "Error!",
...
};
そのため、これは単にHTMLヘッドタグにオブジェクトをロードします。これは次の方法で利用できます。
バックエンド:
wp_localize_script( 'FrontEndAjax', 'ajax', array(
'url' => admin_url( 'admin-ajax.php' )
) );
このメソッドの利点は、テーマにajax URL変数をハードコーディングしていないため、テーマとプラグインの両方で使用できることです。
フロントエンドでは、URLにajax.url
。前の例のajaxurl
だけではありません。
まず、このページをよくお読みください http://codex.wordpress.org/AJAX_in_Plugins
次に、_ajax_script
_が定義されていないため、_url: ajaxurl
_に変更する必要があります。上記のコードにfunction1()
が表示されていませんが、他のファイルで既に定義されている可能性があります。
そして最後に、Firebugを使用してajax呼び出しをデバッグする方法を学び、ネットワークとコンソールのタブが友達になります。 PHP側では、print_r()
またはvar_dump()
が友達になります。
Wp_localize_scriptを使用してURLを渡します:
wp_localize_script( some_handle, 'admin_url', array('ajax_url' => admin_url( 'admin-ajax.php' ) ) );
その後、js内で、次のように呼び出すことができます
admin_url.ajax_url
個人的に私はwordpressで他のサイトでajaxを行うのと同じ方法でajaxを行うことを好みます。すべてのajaxリクエストを処理するプロセッサphpファイルを作成し、そのURLを使用します。 wordpressでは正確にhtaccessができないため、次のようにします。
1. wp-contentフォルダーにあるhtaccessファイルで、既にあるものの下にこれを追加します
<FilesMatch "forms?\.php$">
Order Allow,Deny
Allow from all
</FilesMatch>
この場合、私のプロセッサファイルはforms.phpと呼ばれます-これをheader.phpやfooter.phpなどの他のすべてのファイルとともにwp-content/themes/themeNameフォルダに配置します...それはただあなたのテーマにありますルート。
2.)私のajaxコードでは、このようにURLを使用できます
$.ajax({
url:'/wp-content/themes/themeName/forms.php',
data:({
someVar: someValue
}),
type: 'POST'
});
もちろん、以前、成功、またはエラーの種類を追加することができます...しかし、これは(=信じる)簡単な方法ですwordpress 8つの異なる場所で何が起こるのか、これにより、ページレベルでjsコードを置く場所で他の人が見ていることを避けることができるので、jsファイルを別々に保つことを好むphpに浸ることができます。