使用search.php进行自定义搜索结果?另外wp查询分页不起作用

时间:2013-11-26 00:02:28

标签: wordpress

我正在制作一个过滤插件,我想使用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它可以正常工作,但我无法将其传递给我想要的参数。

1 个答案:

答案 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)之前进行了更改,就应该没问题。