我在单个帖子页面上创建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年
AJAX操作未定义$ wp_query,因为除$ _POST数据外没有其他上下文。
—
Brian Fegter
在我的索引页面上如何工作?我用它用搜索结果替换默认循环,并且可以正常工作。
—
Pollux Khafra 2012年