【问题标题】:Use search.php for custom search results? Also wp query pagination not working使用 search.php 自定义搜索结果? wp查询分页也不起作用
【发布时间】:2013-11-26 00:02:27
【问题描述】:

我正在制作一个过滤器插件,我想使用 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;

?>

搜索.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 它可以工作,但是我无法将我想要的参数传递给它。

【问题讨论】:

    标签: wordpress


    【解决方案1】:

    好的,所以我花了很多时间尝试解决我认为的相同问题,只是找到了很多关于如何使用 wp_reset_query 重置查询的建议(对于经验丰富的开发人员来说,这是相当可预测的)。

    我发现基本上这个问题与我的 search.php 中的查询无关,而是与查询字符串有关,因为它只是在搜索结果页面上,所以在我的短代码或插件中,我只需将全局 wp_query is_search 方法设置为 false 和 BAM!终于得到了我预期的结果。

    global $wp_query;
    $wp_query->is_search = false;
    

    试一试,让我知道它对你有用。只要您在声明自己的WP_Query($args) 之前进行更改就可以了。

    【讨论】:

    • 我实际上在不久前解决了这个问题,我最终使用了强大的 WP Query 本身及其参数,并且它与 search.php 一起使用,问题是使用 set 方法。如果您需要这方面的帮助,请告诉我。就我个人而言,直到这里的某个好人向我介绍了这种方法,我才看到这种方法。
    • 很高兴你明白了,没有看到提供的答案,所以想我会发布我的。祝你好运
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 2014-03-19
    相关资源
    最近更新 更多