我如何在json请求中保留受密码保护的帖子,而不是在前端查询中?

时间:2017-08-10 作者:friendlyfire

我试图从任何前端循环中排除受密码保护的帖子-灵感来自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请求中保留受密码保护的帖子,而不是在前端。

我错过了什么?

1 个回复
最合适的回答,由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中隐藏,因此如果有人有任何建议,我将不胜感激。

结束

相关推荐

Php致命错误:无法将WP_REST_RESPONSE类型的对象用作wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php中

我向WordPress添加了一个自定义端点,如下所示: add_action( \'rest_api_init\', function () { register_rest_route( \'menc/v1\', \'/crosscat/(?P[\\w-]+)/(?P[\\w-]+)\', array( \'methods\' => \'GET\', \'callback\' => \'dept_cat_api\',&#x