搜索不适用于标题和内容

时间:2019-12-12 作者:Naren Verma

我正在进行搜索。我可以按标签和类别搜索帖子,但不能按标题和内容搜索。

我尝试了下面的代码,但不起作用。你能帮帮我吗?

$getSearch = get_search_query();
//print($search);
$query = new WP_Query([
  \'post_type\' => \'post\',
  \'tax_query\' => array(
    \'relation\' => \'OR\',
       array(
      \'s\'=> $getSearch // for title and content
    ),
    array(
      \'taxonomy\' => \'post_tag\', //for tag
      \'field\' => \'slug\',
      \'terms\' => array($getSearch),
    ),
    array(
      \'taxonomy\' => \'category\', // for category
      \'field\' => \'slug\',
      \'terms\' => array($getSearch),
    ),
  ),
]); 

if ($query->have_posts() ):
      while ( $query->have_posts() ) {$query->the_post();?>
<!--some content-->
<?php }
else :
       get_template_part( \'template-parts/content\', \'none\' );
        endif;
?>
?>

function.php

add_action( \'pre_get_posts\', \'my_search_exclude\' );
function my_search_exclude( $query ) {
  if ( ! $query->is_admin && $query->is_search && $query->is_main_query() ) {
    $query->set( \'post_type\', array( \'post\', \'page\', \'product\' ) );
    $query->set( \'post__not_in\', array( 471 ) );
     $taxquery=  array(
  \'post_type\' => \'any\',
  \'s\'=> $query->get(\'s\')
);
$query->set( \'tax_query\', $taxquery);

  }
}

1 个回复
SO网友:Tom J Nowell

Edit: 您的实际问题似乎是搜索标记和类别,因此将s 中的参数tax_query.

无法仅使用提供的字段搜索标签类别和其他术语WP_Query. 您的查询不起作用,因为只有可用的参数无法满足您的需要。

与其问如何修复您的解决方案/尝试,不如问一个关于如何搜索分类术语/类别/标记的新问题

原始答案:

搜索不起作用的原因是您的查询没有搜索:

$query = new WP_Query([
  \'post_type\' => \'post\',
  \'tax_query\' => array(
    \'relation\' => \'OR\',
       array(
      \'s\'=> $getSearch // for title and content
    ),
...
出于某种原因s 参数已插入tax_query, 这没什么意义。

例如,以下是一个普通查询,用于搜索:

$query = new WP_Query([
  \'s\' => \'search terms\',
etc..
但出于某种原因,你把它放在tax_query:

$query = new WP_Query([
  \'tax_query\' => array(
    \'relation\' => \'OR\',
       array(
          \'s\'=> $getSearch // for title and content
       ),
这是行不通的,也不是文档和示例所建议的。

此外,代码不必要地创建了一个全新的查询,这也没有意义,因为它会将页面加载时间增加一倍,并破坏分页。

相反,通过使用pre_get_posts 过滤器,例如infunctions.php:

add_action( \'pre_get_posts\', function( \\WP_Query $q ) {
    if ( !$q->is_main_query() || !$q->is_search() ) {
        return;
    }
    $q->set( \'tax_query\', ....... );
} );
现在您可以使用search.php 正如预期的那样,使用标准的post循环,一切都将正常工作。不需要在文件顶部进行查询。

TLDR:如果您想更改WP显示的帖子,请通过pre_get_posts. 不要创建第二个查询,它会削弱性能并引入许多新问题

相关推荐

Create posts inside CPT post

在CPT中,每个帖子承载多个帖子,并使用自定义URL访问它们。自定义帖子类型:序列创建具有序列标题的帖子:abc、xyz等现在,这就是我需要创建的内容,在我想要创建帖子的每个序列(abc、xyz)中。然后使用自定义URL访问主题访问所有序列:http://localhost/serial/访问标题为的序列号:http://localhost/serial/abc/访问剧集:http://localhost/serial/abc/episode-1 &;http://localhost/serial/