获取自定义wp_Query搜索结果以显示在earch.php上

时间:2013-11-26 作者:dzimidula

我有一个搜索。我的模板中的php页面,当与本机搜索小部件一起使用时效果很好,但我正在制作一个搜索插件,其中有一个自定义的wp\\U查询,我希望这些结果显示在搜索中。php代替常规搜索小部件结果。

到目前为止,我的插件运行良好,我“只是”希望它在搜索中输出。php。

我尝试添加pre_get_posts 过滤器和posts_search 但是过滤器钩子在浏览器中显示“连接已重置”,操作钩子也会这样做,并且在加载插件的页面上会出现WP数据库错误。

进行查询的函数的相关部分:

$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="supers" onblur="if (this.value == \'\') { this.value = \'{$search_text}\';}" />
        {$list}
        <input type="submit" id="sbc-submit" value="Search" />
    </form>
    </div>
EOH;


if (isset($_GET[\'supers\'])) {

    global $q;
    // global $q;
    $args = array(
        // \'category__not_in\' => 1,
        \'s\' => $_GET[\'supers\'],
        \'paged\' => get_query_var(\'paged\')
    );

    $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 \'<br>Posts found :\'.$q->found_posts.\'<br><br>\';
            echo get_pagination_links2();
    } else {
        echo \'no posts found\';

    }

    /* Restore original Post Data */
    wp_reset_postdata();
}

return $form;

} // end function

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

您正在混合表单显示和搜索逻辑。这是代码中的第一件坏事。

其次,每次运行查询时都会触发您使用的钩子,甚至是函数内部的查询,这会导致无限循环。

因此,首先,将逻辑与显示分离:

function vkss_super_search_form( $atts = \'\' ) {
  $atts = shortcode_atts( array(
    // your default params
  ), $atts );
  // some code you have here
  ob_start();
  ?>
  <div id="sbc">
  <form method="get" action="<?php echo $blog_url; ?>" id="ss-search">
  <input type="text" value="<?php $search_text  ?>" name="supers" onblur="if (this.value == \'\') { this.value = \'<?php echo $search_text; ?>\';}" />
  <?php echo $list; ?>
  <input type="submit" id="sbc-submit" value="Search" />
  </form>
  </div>
  <?php
  return ob_get_clean();
}
add_shortcode(\'vkss_super_search\', \'vkss_super_search_form\');
上一个函数通过快捷码打印表单。

现在,您必须在提交表单时运行搜索。您想使用search.php 但您必须注意,没有人强制将该文件放在主题上,因此您必须提供index.php (就像WordPress一样)如果该文件不存在。

您可以使用\'pre_get_posts\', 检查\'supers\' GET变量存在,如果存在,请运行更改主查询。之后search.php 将由WordPress使用,因为您正在设置搜索查询。

add_action(\'pre_get_posts\', \'vkss_super_search\');

function vkss_super_search( $query ) {
  if ( ! is_admin() && $query->is_main_query() && $query->is_front_page() ) {
    $supers = filter_input( INPUT_GET, \'supers\', FILTER_SANITIZE_STRING );
    if ( empty( $supers ) ) return;
    $query->is_search = true;
    $query->set( \'s\', $supers );
    // $query->set( \'category__not_in\', 1 );
  }
}
请注意,所有第二个代码块unnecessary 如果命名输入字段\'s\' 而不是\'supers\'.

<input type="text" value="{$search_text}" name="s" />

结束

相关推荐

WP_User_Query not searching

我目前有以下代码,在user\\u business表中有一个名为“Clark Farm”的用户。下面的代码不返回任何内容。如果删除搜索词,则会列出所有用户。我正在试图确定为什么搜索不起作用。。<?php /** * @package WordPress * @subpackage themename */ get_header(); ?> <?php $url = $_SERVER[\'REQUEST_U