【问题标题】:Modifying search function to exclude posts and limit results to 10 per page on front end only修改搜索功能以排除帖子并将结果限制为仅在前端每页 10 个
【发布时间】:2016-10-10 20:03:05
【问题描述】:

这个问题分为两部分。我有从搜索中排除帖子并将结果限制为每页 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文件http://pastebin.com/tTEnHGp2的Pastebin

【问题讨论】:

  • 要找出错误原因,请在您的wp-config.php 中设置define('WP_DEBUG', true);。这将向您显示错误,但仅当您使用本地服务器或开发服务器时才使用它。另见:codex.wordpress.org/Debugging_in_WordPress

标签: php wordpress


【解决方案1】:
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');

应该这样做

【讨论】:

  • 我将此代码添加到我的 functions.php 文件的底部,但在尝试加载网站时它仍然显示 http 500 错误。我复制并粘贴了它。我看到我的 if 在您确实包含在您的 sn-p 中的查询搜索中我没有使用它,但它仍然会引发错误。如果您再次查看并提出任何建议,我将不胜感激。
  • @d.ariel 我已经更新了代码,请检查它并在我留下评论的地方添加一些错误捕获和检查。
  • 我复制了你更新的代码,但它仍然抛出 500 错误。不知道如何在注释代码的地方进行错误捕获。
  • 由于我看不到您的完整功能文件,我无法说出问题所在,但只需检查我的蓝图并修改为您想要的。
  • 我已编辑问题以包含整个文件。我使用 wordpress 的默认 2016 主题,并且我已经添加了带有整个 functions.php 文件的 pastebin。 pastebin.com/tTEnHGp2
【解决方案2】:

好的,不要将搜索函数包裹在 is_admin() 周围,而是将 is_admin() 放在函数内

像这样:

Function search(){
    if ( is_admin()){
        //Search query for admin
    }
   else {
       //Search query for users
   }
}

应该这样做

【讨论】:

  • 我已经更新了我的问题。我知道我的 php 代码中存在语法错误,我尽可能地遵循您的建议。您能帮忙改正错误吗?
猜你喜欢
  • 2020-12-11
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多