全面限制已登录用户的帖子类型分类

时间:2015-03-12 作者:mrwweb

我已经注册了employers 具有多个关联分类的帖子类型,并希望所有关联页面(单个、术语存档、帖子类型存档页面)仅可由登录用户查看。

我和capabilities 的参数register_post_type() 看着map_meta_cap 过滤,但就是不能很好地将这些片段组合在一起。似乎我需要使用一个自定义功能,但这一功能似乎有些过头了。我看到一些关于使用template_redirect 功能,但不确定这是否是正确的方式。

尽管进行了大量的搜索,我还是很难回答一个简单的问题。如何限制任何功能的登录用户对自定义帖子类型或自定义分类法的访问?

我看到了“Restrict custom post type view by user role“但这只是过滤器the_content. 我也看了很多”Restrict custom post type to only site administrator role“但似乎更多的是关于登录用户。最后”Set posts of a custom post type to be private by default?“只设置帖子状态,这意味着编辑可能会意外地将帖子公开,这是一个破坏交易的行为。

1 个回复
SO网友:Travis Seitler

我也遇到过类似的情况(比如说,客户希望在准备好让公众看到自定义帖子类型和/或分类法之前了解其行为)。在这些情况下,我将使用类似以下代码片段的内容,添加到插件文件(假设我已将CPT/分类法构建为插件)或直接在活动主题的函数中。php:

/**
 * IN-DEVELOPMENT REDIRECTS
 * While specified areas are under development, redirect users to home page if not logged in
 */
add_filter( \'wp\', \'f040925b_redirect\', 0 );
function f040925b_redirect( $content ) {
    global $post;
    if(
        (
            $post->post_type == \'[custom_post_type_name]\'
            ||
            is_post_type_archive( \'[custom_post_type_name]\' )
            ||
            is_tax( \'[custom_taxonomy_name]\' )
        )
        &&
        !is_user_logged_in()
    ) {
        wp_redirect( get_home_url() );
        exit;
    }
    return $content;
}
基本上,这会运行三个早期检查:

$post对象的post类型是否与您要隐藏的内容匹配如果其中任何一项匹配,并且用户未登录,则用户将被重定向到网站主页。

结束

相关推荐

Updates for a private plugin?

如果我写一个私有插件,有没有办法使用WordPress自动更新机制来更新它 我想封装这个功能,但它是我自己的5个博客特有的,所以它不是公共插件资源的好候选。但我喜欢这种简单的更新机制 有没有办法做到这一点