我正在制作一个过滤插件,我想使用search.php来获得结果,但是如果我在我的插件中将文本输入名称设置为's',那么它使用常规搜索功能,而不是WP_Query方法我在我的插件中设置。
如果我更改名称并使插件使用该名称,我会得到结果,但是在插件本身出现的位置。
那么,我可以以某种方式使search.php页面使用我的插件的结果吗?
表单和我的查询:
<?php
$blog_url = get_bloginfo('url');
$form = <<<EOH
<div id="sbc">
<form method="get" action="{$blog_url}" id="ss-search">
<input type="text" value="{$search_text}" name="ss" onblur="if (this.value == '') { this.value = '{$search_text}';}" onfocus=if (this.value == '{$search_text}') { this.value = '';}" />
{$list}
<input type="submit" id="sbc-submit" value="Search" />
</form>
</div>
EOH;
if (isset($_GET['ss'])) {
$args = array(
// 'category__not_in' => 1,
's' => $_GET['ss']
);
$q = new WP_Query($args);
if ( $q->have_posts() ) {
echo '<ul>';
while ( $q->have_posts() ) {
$q->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
echo get_pagination_links();
} else {
echo 'no posts found';
}
/* Restore original Post Data */
wp_reset_postdata();
}
echo $form;
?>
的search.php
<p class="search_results">Your search for <span class="searchterm"><?php the_search_query(); ?></span> has returned <?php echo $totalresults; ?> results.</p>
<?php
global $paged;
if(empty($paged)) $paged = 1;
$loop_counter = 1;
$results_per_page = get_query_var('posts_per_page');
echo '<ul class="search-list">';
if ( have_posts() ) : while ( have_posts() ) : the_post();
if( $paged == 1 ) {
$real_count = $loop_counter;
} else {
$real_count = $loop_counter + ( $paged * $results_per_page - $results_per_page);
}
echo '<li><span class="listnum">' . $real_count . '.</span>';
// The Post
?>
<a href="<?php the_permalink(); ?>"><?php echo substr(strip_tags($post->post_content), 0, 46);?>...</a>
<?php
echo '</li>';
// genesis_after_post();
$loop_counter++;
endwhile;
// genesis_after_endwhile();
else :
// genesis_loop_else();
echo '<p>No results found. Search for "page" for best results.';
endif;
echo '</ul>';
?>
此外,分页不适用于自定义WP_Query($ q)。我得到分页链接,但它们不起作用。例如,如果我点击第二页,则没有任何反应。如果我将$q
更改为$wp_query
它可以正常工作,但我无法将其传递给我想要的参数。
答案 0 :(得分:0)
好的,所以我花了很多时间尝试解决我认为的相同问题,并且发现了很多关于如何使用wp_reset_query
重置查询的建议(对于经验丰富的开发人员来说,这是相当可预测的)。 / p>
我发现的是,基本上问题与我的search.php中的查询无关,但是只是在搜索结果页面上与查询字符串有关,所以在我的短代码或插件中我只需将全局wp_query is_search方法设置为false和BAM即可!终于得到了我预期的结果。
global $wp_query;
$wp_query->is_search = false;
尝试一下让我知道它对你有用。只要您在声明自己的WP_Query($args)
之前进行了更改,就应该没问题。