質問: json_encode($output); // response output header( "content-type: application/json" ); echo $response; // important: don't forget to "exit" exit; } 私はここで何を誤解しますか?通常のjavascriptファイル内からajaxを介してデータを要求できるようにしたいだけです。私は私のjavascriptファイルに戻ってくるhtmlを処理する必要があります。私が何をしているのか、それともうまくいっているのか、私がこれを機能させるためにしなければならないことはありますか?
回答: さて、最初に少し分解してみましょう。そうすれば、これらの機能の目的を理解できます。 wp_enqueue_script() 説明: 生成されたwordpressページにjavascriptを追加する安全な方法。基本的に、まだ含まれていない場合はスクリプトを含め、wordpressが出荷するスクリプトをロードします。 wp_localize_script() 説明: スクリプトをローカライズしますが、スクリプトが既に追加されている場合のみ。ページに任意のjavascriptデータを含めるためにも使用できます。 スクリプトをローカライズするとき、あなたがしていることは、javascript変数をページに出力するアクションを設定することだけですが、これらの変数は、登録するスクリプトに結び付けられ、wp_localize_scriptに渡す最初のパラメーターです。また、スクリプトhandleとしても知られています。wp_enqueue_scriptはjavascriptファイルをキューに入れるためのものであり、wp_localize_scriptはエンキューシステムを介してロードされたスクリプトに付随するように設計されています。何もローカライズすることはできません。したがって、キューに登録しない場合、wp_localize_scriptはここでは役に立ちません。通常、このような2つを使用します。$myvars = array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'somevar1' => $somevar_from_somewhere, 'somevar2' => $somevar_from_elsewhere ); wp_enqueue_script( 'my-ajax-request', plugins_url( '/path/to/somefile.js', __file__ ) ); wp_localize_script( 'my-ajax-request', 'myajax', $myvars ); これにより、ページに次の出力が生成されます。<script type="text/javascript" src="path/to/somefile.js"></script> <script type="text/javascript"> /* <![cdata[ */ var myajax = { ajaxurl: "http://example.com/wordpress/wp-admin/admin-ajax.php", somevar1: "somevalue", somevar2: "someothervalue" }; /* ]]> */ </script> これをスクリプトで参照できます。たとえば.jquery(document).ready( function($) { alert( myajax.somevar1 ); // produces somevalue alert( myajax.somevar2 ); // produces someothervalue }); これをすべて一緒に投げると、コードは次のようになります。// setup the ajax callback for the "searchmap" action add_action( 'wp_ajax_searchmap', 'my_searchmap_function' ); add_action( 'wp_ajax_nopriv_searchmap', 'my_searchmap_function' ); // the callback function for the "searchmap" action function my_searchmap_function() { $myposts = get_posts('numberposts=-1&offset=$first'); ?> <div> <h3>pages</h3> <ul> <?php wp_list_pages('title_li=&depth=0&exclude='); ?> </ul> <h3>posts</h3> <ul> <?php foreach( $myposts as $post ) : setup_postdata( $post ); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endforeach; ?> <?php wp_reset_postdata(); ?> </ul> <h3>categories</h3> <ul> <?php wp_list_categories('title_li=&orderby=name'); ?> </ul> </div> <?php die; } js ..(エンキューおよびローカライズされたと仮定)jquery(document).ready(function($) { $('a.myajax').click(function(){ var data = { action: 'searchmap' // <--- this is the correct action name }; $.post( myajax.ajaxurl, data, function(response) { $('#myresult').html(response); }); return false; }); }); そして、アクションをトリガーするためにページで必要な実際のhtml。<a class="myajax" href="#">click me to fetch ajax content</a> <div id="myresult"></div> 実際の回答あなた自身のことをする必要があり、あなたのスクリプトのvarsを印刷する必要があることに関して、私はこのようなことをすることをお勧めします...add_action( 'wp_head', 'my_js_vars', 1000 ); function my_js_vars() { // if it's not a specific page, stop here if( !is_page( 'my-page-with-ajax' ) ) return; ?> <script type="text/javascript"> /* <![cdata[ */ var myajax = { ajaxurl: '<?php admin_url('admin-ajax.php'); ?>', somevar: 'somevalue', someothervar: 'someothervalue' }; /* ]]> */ </script> <?php /* note: make sure not to leave a comma after the last item in the js array, else ie(internet explorer) will choke on the js. */ } 他の人が読むために以前に投稿したコードを残しました。