我试图从任何前端循环中排除受密码保护的帖子-灵感来自this post
然而,我有一个自定义的angularjs管理主题,当用户访问某个帖子类型并以管理员身份登录时,该主题就会被激活(ar管理页面)。这将绕过wp admin。它通过调用Json wp api来拉动要操纵的帖子。
The problem: 通过mu插件中的以下内容,我可以从前端删除受密码保护的帖子,但它也可以从json GET调用中删除帖子。过滤器似乎不尊重查询变量检查,即使当我回显$query->query\\u vars[\'post\\u type\',我可以看到“ar admin page”作为post类型。
function ar6_password_post_filter( $where = \'\', $query) {
global $wpdb;
// Make sure this only applies to loops / feeds on the frontend
// if it\'s not a single post, it\'s not an admin and it\'s not a particular post type request
if ( !is_single() && !is_admin() && \'ar-admin-page\' != $query->query_vars[\'post_type\'] ) {
// exclude password protected
$where .= " AND post_password = \'\' ";
}
return $where;
}
add_filter( \'posts_where\', \'ar6_password_post_filter\', 0, 2);
我还试着检查per的常数
this配置文件
define( \'JSON_REQUEST\', true );
在我的过滤器功能中
function ar6_password_post_filter( $where = \'\', $query) {
global $wpdb;
// Make sure this only applies to loops / feeds on the frontend
// if it\'s not a single post, it\'s not an admin and it\'s not a json request
if ( !is_single() && !is_admin() && !JSON_REQUEST ) {
// exclude password protected
$where .= " AND post_password = \'\' ";
}
return $where;
}
add_filter( \'posts_where\', \'ar6_password_post_filter\', 0, 2);
我只是想在json请求中保留受密码保护的帖子,而不是在前端。
我错过了什么?
最合适的回答,由SO网友:friendlyfire 整理而成
我用这个解决了这个问题:
function ar6_password_post_filter( $where = \'\' ) {
if (!is_single() && !current_user_can(\'edit_private_posts\') && !is_admin()) {
$where .= " AND post_password = \'\'";
}
return $where;
}
add_filter( \'posts_where\', \'ar6_password_post_filter\' );
这允许管理员和编辑器的用户角色仍然可以在站点前端看到受密码保护的帖子,但会对其他人隐藏这些帖子。
然而,我仍然想在前端向管理员隐藏受密码保护的帖子,但不想在json api中隐藏,因此如果有人有任何建议,我将不胜感激。