【发布时间】: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