単一の投稿ページでajax検索を作成する際に問題が発生しました。検索結果をカスタム投稿タイプ「fod_videos」と「post」およびカテゴリ12に制限する必要があります。私の問題は、検索がそれらのフィルターの下のすべての投稿を返し、検索値を取得しないことです。私は明白な何かが欠けていると思いますが、それを理解することはできます。これが私の設定です。
<div class="panel">
<h2>Search Videos</h2>
<div id="my-search">
<form role="search" method="get" id="searchform" action="http://myurl.com/" >
<input type="text" value="" name="s" id="s" />
<input type="submit" id="searchsubmit" value="Search" />
</form>
</div>
</div>
add_action('wp_ajax_wpa5000_search', 'wpa5000_search');
add_action('wp_ajax_nopriv_wpa5000_search', 'wpa5000_search');
function wpa5000_search(){
global $wp_query;
$search = $_POST['search_val'];
$args = array(
's' => $search,
'posts_per_page' => 10,
'cat' => 12,
'post_type' => array( 'post','fod_videos' )
);
$wp_query = new WP_Query( $args );
get_template_part( 'video-search-results' );
exit;
}
add_action( 'wp_enqueue_scripts', 'wpa56343_scripts', 100 );
function wpa56343_scripts() {
wp_enqueue_script(
'wpa56343_script',
get_template_directory_uri() . '/libs/search.js?ver=1.0',
array( 'jquery' ),
null,
false
);
wp_localize_script(
'wpa56343_script',
'WPaAjax',
array(
'ajaxurl' => admin_url( 'admin-ajax.php' )
)
);
}
// search.php
$(document).ready(function($){
$('#searchsubmit').click(function(e){
var $panel = $(this).closest(".panel");
$panel.empty();
e.preventDefault();
var search_val=$("#s").val();
$.post(
WPaAjax.ajaxurl,
{
action : 'wpa5000_search',
search_val : search_val
},
function( response ) {
$panel.append( response );
}
);
});
});
//video-search-results.php
<?php
while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
//STUFF
<?php endwhile; ?>
$ wp_queryは実際のWP_Queryオブジェクトですか?
—
Brian Fegter
@BrianFegterどういう意味かわかりません。インデックスページでこの正確な式を使用してajax検索結果を取得するのは奇妙なことです。それは単にsearch_valをプルしていません。$ searchを印刷してみましたが何も返りません。
—
Pollux Khafra 2012
$ _POSTデータ以外のコンテキストがないため、AJAXアクションには$ wp_queryが定義されていません。
—
Brian Fegter
インデックスページから何が機能するのですか?私はそれを使用して、デフォルトのループを検索結果に置き換え、それが機能します。
—
Pollux Khafra