Ajaxを介して、変更された$wp_query
が取得できません。。
###実現したいこと
現在、下記の// 条件A
によってメインループを変更し正しく動作する状況ですが、これをAjaxを介して取得したいです。
php
1function myPreGetPosts( $query ) { 2 // 条件A 3} 4add_action('pre_get_posts','myPreGetPosts');
###試したこと
Ajaxのコードは下記JSとPHPになってます。
問題は、$the_query
に上の条件Aが入らず、普通の$wp_query
が入ってしまうことです。
(PHPにある// 条件Aを入れたい!
の部分です。)
jQuery
1"use strict"; 2function Ajax(){ 3(function($){ 4 // 必要な値を取得 5 var selectedList = $('.ajax input:checked').val(); 6 if( selectedList == 'kiji' ){ 7 var ajax_area = $('#ajax_kiji'); 8 } 9 if( selectedList == 'user' ){ 10 var ajax_area = $('#ajax_user'); 11 } 12 // Ajax処理 13 $.ajax({ 14 url: MY_AJAX.api, 15 type: 'POST', 16 data: { 17 action: MY_AJAX.action, 18 nonce: MY_AJAX.nonce, 19 submitList: selectedList 20 } 21 }) 22 // scusess 23 .done(function( response ) { 24 var $articleOuter = ajax_area; 25 var $response = response; 26 $articleOuter.html(''); 27 $articleOuter.html( $response ); 28 }) 29 // error 30 .fail(function( response ) { 31 alert('error'); 32 }); 33})(jQuery); 34}
php
1/* 必要な変数やnonceを最初から出しておく */ 2function my_enqueue_scripts() { 3 $handle = 'my-script'; 4 $jsFile = 'path/to/myscript.js'; 5 wp_register_script($handle, $jsFile, ['jquery']); 6 $action= 'my-ajax-action'; 7 wp_localize_script($handle, 'MY_AJAX', [ 8 'api' => admin_url( 'admin-ajax.php' ), 9 'action' => $action, 10 'nonce' => wp_create_nonce( $action ), 11 ]); 12 wp_enqueue_script($handle); 13} 14 15/* JSから受け取った値を使って表示内容を変える */ 16add_action( 'wp_ajax_my-ajax-action', 'my_ajax_event' ); 17add_action( 'wp_ajax_nopriv_my-ajax-action', 'my_ajax_event' ); 18function my_ajax_event() { 19 20 $action = 'my-ajax-action'; 21 22 if( check_ajax_referer($action, 'nonce', false) ) { 23 24 // データ受け取り 25 $submitList = esc_html( $_POST['submitList'] ); 26 27 // データ更新 28 // 記事リストの場合 29 if( $submitList == 'kiji' ){ 30 require_once( dirname(dirname(dirname(dirname(dirname( __FILE__ ))))) . '/wp-blog-header.php' ); 31 add_action('pre_get_posts','myPreGetPosts'); 32 global $wp_query; 33 $the_query = $wp_query; // 条件Aを入れたい! 34 include locate_template( 'template-parts/loop-kiji.php' ); 35 } 36 // userリストの場合 37 if( $submitList == 'user' ){ 38 include locate_template( 'template-parts/loop-user.php' ); 39 } 40 41 } 42 43 die(); 44}
いちおうrequire_once
でwp-blog-header.php
を読んで、add_action
で条件Aを読んで、その後に$wp_query
を読んでいるつもりなんですけど、条件Aではなく普通の$wp_query
が入ってしまいます。
どうしたらAjaxを介して条件Aを使うことができるのでしょうか?
ちなみに// 条件Aを入れたい!
で$wp_query
ではなくサブループを作ればきちんと動きます。
宜しくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/19 19:27
2019/01/19 19:29
2019/01/19 19:35
2019/01/19 19:39 編集
2019/01/19 19:49
2019/01/19 20:32
2019/01/19 20:35
2019/01/20 01:24