php - 修改搜索功能以排除帖子并将结果限制为仅在前端每页 10 个

标签 php wordpress

这个问题分为两部分。我有解决方案,可以从搜索中排除帖子并将结果限制为每页 10 个结果,但问题是它也会影响后端 wp-admin 区域。因此,如果我通过 wp-admin 区域搜索帖子,则帖子将被排除,即使我只希望非管理员用户发生这种情况。这是我用于排除帖子并将结果限制为 10 的代码:

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

function change_wp_search_size($query) {
    if ( $query->is_search ) // Make sure it is a search page
        $query->query_vars['posts_per_page'] = 10;

    return $query;
}
add_filter('pre_get_posts', 'change_wp_search_size');

现在我已经在堆栈和其他网站上做了一些阅读和研究,看起来有一种方法只能在检查管理员是否登录后才触发这些功能。我将引用 wordpress codex对于 is_admin 函数

这是我尝试使用 is_admin 函数的方式,导致 http 错误 500。如果代码严重错误,请原谅:

if ( !is_admin() ) {
function SearchFilter($query) {
if ($query->is_search && !is_admin() ) {
$query->set('post_type', 'page');
}
return $query;
}
add_filter('pre_get_posts','SearchFilter');
if ( !is_admin() ) {
function change_wp_search_size($query) {
if ( $query->is_search && !is_admin() )
$query->query_vars['posts_per_page'] = 10;
return $query;
}
add_filter('pre_get_posts', 'change_wp_search_size');

我希望我已经接近了,只需要对代码进行一些调整

编辑: 所以现在这就是我所拥有的两个功能。我知道这是我的 php 代码的问题,您可以进一步提供帮助吗:

function SearchFilter($query) {
if ( is_admin () ) {
return $query;
}
else {
($query->is_search) {
$query->set('post_type', 'page');
}
return $query;
}
add_filter('pre_get_posts','SearchFilter');

function change_wp_search_size($query) {
if ( is_admin () ) {
return $query;
}
if ( $query->is_search ) // Make sure it is a search page
$query->query_vars['posts_per_page'] = 10;

return $query;
}
add_filter('pre_get_posts', 'change_wp_search_size');

编辑2:整个function.php文件的Pastebin http://pastebin.com/tTEnHGp2

最佳答案

function SearchFilter($query) {
    if ($query->is_search && !is_admin() ) {
        $query->set('post_type', 'page');
    }


    return $query;
}

add_filter('pre_get_posts','SearchFilter');

function change_wp_search_size($query) {
    if ( $query->is_search && !is_admin() ) {
        $query->query_vars['posts_per_page'] = 10;
    }

    return $query;
}

add_filter('pre_get_posts', 'change_wp_search_size');

这应该可以做到

关于php - 修改搜索功能以排除帖子并将结果限制为仅在前端每页 10 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39940060/

相关文章:

php - RHEL 6、PHP 5.3.3、symfony 1.4.[12] -> 不规则 PHP fatal error : Class 'sfProjectConfiguration' not found in

mysql - 如何从自定义mysql数据库自动导入wordpress内容?

css - 如何使用 Bootstrap for Wordpress 将 Sass 实现为下划线主题?

php - 多个复选框过滤器未正确过滤

php - Ubuntu 上的 Pear SOAP 和 XAMPP

mysql - WordPress 报告数据库错误,但修复没有任何作用

css - html + CSS div显示错误

mysql - WordPress Max 登录重置

php - 变量的单数或复数设置。 PHP

php - 在 Javascript 中使用存储在 $_GET/$_SESSION 中的值