搜索功能工作不正常

时间:2018-06-13 作者:tera_789

因此,我正在尝试编辑我的搜索,以便它只搜索特定类别。我正在将此代码添加到functions.php 子主题中的文件:

function searchcategory($query) {
    if ($query->is_search) {
        $query->set(\'cat\',\'37\');
    }
    return $query;
}
add_filter(\'pre_get_posts\',\'searchcategory\');
这就是问题所在:例如,当我运行这段代码时,我的搜索甚至找不到任何东西。

重要提示:1)首先,我使用Toolset插件创建了几个分类法和自定义帖子类型,这些是其中一个分类法的ID-我将光标悬停在分类法的名称上查找其ID。这可能是个问题吗?2) 当我运行这段代码时(假设从搜索结果中排除所有页面),我仍然会看到一些页面。这很奇怪。

function SearchFilter($query) {
    if ($query->is_search) {
        $query->set(\'post_type\', \'page\');
    }
    return $query;
}

add_filter(\'pre_get_posts\',\'SearchFilter\');
有人知道是什么导致了这个问题吗?

2 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

此代码应该可以正常工作,但是。。。它有一些问题。让我们将其分解并添加一些评论。

function searchcategory($query) {
    if ($query->is_search) {
        // Checking only for is_search is very risky. It will be set to true
        // whenever param "s" is set. So your function will modify any wp_query with s,
        // for instance the one in wp-admin... But also any other, even if
        // the query isn\'t querying for posts...

        $query->set(\'cat\',\'37\');
        // You pass ID of term in here. It\'s a number. Passing it as string
        // is not a problem, but it\'s another bad practice, because it will
        // have to be converted to number.
    }
    return $query;

    // It\'s an action - you don\'t have to return anything in it. Your result 
    // will be ignored.
}
add_filter(\'pre_get_posts\',\'searchcategory\');

// pre_get_posts is and action and not a filter.
// Due to the way actions/filters are implemented,
// you can assign your callback using `add_filter`,
// but it isn\'t a good practice.
那么如何写得更好呢?

function searchcategory($query) {
    if ( ! is_admin() && $query->is_main_query() && $query->is_search() ) {
        $query->set( \'cat\', 37 );
    }
}
add_action( \'pre_get_posts\', \'searchcategory\' );

SO网友:tera_789

我解决了这个问题。我添加了相同的代码:

function searchcategory($query) {
if ($query->is_search) {
$query->set(\'cat\',\'37\');
}
return $query;
}
add_filter(\'pre_get_posts\',\'searchcategory\');
问题在于工具集插件。出于某种原因,它把基于类别/分类的搜索结果搞砸了。不管是什么,上面的代码可以很好地与原始WordPress类别配合使用。

结束

相关推荐

Search Issue in the theme

如果我的理解没有错的话☻search.php 负责渲染部分和serachform.php 负责触发搜索事件,对吗?示例searchform.php 可能看起来像这样→<form role=\"search\" method=\"get\" class=\"search-form\" action=\"<?php echo home_url( \'/\' ); ?>\"> <label> <span class=\"scree