WordPress Search

时间:2014-07-09 作者:Keyfer Mathewson

我正试图在我的一个网站上写一个搜索功能,它似乎并没有吸引任何页面,只有帖子。下面是代码。

搜索表单:

          <form role="search" method="get" id="searchform" action="<?php echo home_url( \'/\' ); ?>">
                <input type="text" value="Search" onblur="if (this.value == \'\') {this.value = \'Search\';}" onfocus="if (this.value == \'Search\') {this.value = \'\';}" name="s" id="messagesSearch" />
                <input type="hidden" name="post_type" value="postpage" />
                <img src="<?php bloginfo(\'template_directory\'); ?>/includes/images/icons/search-light.svg" alt="">
          </form>
搜索:

  <?php
       if(isset($_GET[\'post_type\'])) {
           $type = $_GET[\'post_type\'];
           if($type == \'postpage\') {?>

            <?php if (have_posts()) : ?>
                    <?php /* Start the Loop */ ?>
                    <?php while ( have_posts() ) : the_post(); ?>
            <?php if ((get_post_type( $post ) == \'post\') || (get_post_type( $post ) == \'page\')) : ?>

            <?php the_title(); ?>

            <?php endwhile; endif; ?>

        <?php } } ?>
谢谢!

1 个回复
SO网友:Tom J Nowell

您的搜索表单包括:

<input type="hidden" name="post_type" value="postpage" />
因此,当加载搜索页面时,查询变量“post\\u type”设置为加载“postpage”类型的帖子。

由于帖子的类型为“post”,页面的类型为“page”,两者都不是“postpage”,因此您无法获得预期的结果。

下次,不要将保留查询变量用于GET或POST参数。

但除此之外,如果要修改主查询的功能,请使用pre_get_posts 过滤器,例如:

function search_filter($query) {
  if ( !is_admin() && $query->is_main_query() ) {
    if ($query->is_search) {
      $query->set(\'post_type\', array( \'post\', \'page\' ) );
    }
  }
}

add_action(\'pre_get_posts\',\'search_filter\');
其他注意事项:

过多的标签垃圾,这相当于我在每句话的开头自我介绍,然后说再见,你的手指打字速度太快了,省去了你的力气,让事情更容易阅读,因此使用{}大括号和缩进,我知道法典有时会有例子说你应该使用它,但大多数编辑只会使用大括号匹配{}. 如果必须使用if(): endif; 然后坚持语法,不要混合使用这两种语法每行始终有一条语句/命令,当错误消息显示第500行时,您不想在该行上找到5个不同的内容来区分,不要使用内联脚本属性,例如onblur, 这很糟糕,把行为和表现混为一谈。查找相关jQuery事件

结束