WordPress基础教程

WordPress自定义角色无法在自定义文章类型中使用标签和分类的问题

发布时间:2018-05-27 9:48:22

本文作者:

最后更新时间为 2018年5月27日

导语:作者在wordpress主题创建一个bloger的角色,创建了一个blog的文章类型,用于注册博客用户来写博客,但是遇到了一个问题,就是博客用户登录后,写文章无法使用分类和标签。

作者开始使用的是WordPress自带的分类法‘category’、‘post_tag’,自定义角色写自定义文章类型的文章时,无法使用分类和标签。叶子又使用自定义分类法定义了分类,也不能使用。经过再三研究代码,终于解决了。

自定义文章类型代码

作者自定义了文章类型博客,使用 capabilities 定义权限,注意,这一点很重要。

function my_custom_post_blog() {
    
    $labels = array(
    'name'                => _x( 'Blogs', 'Post Type General Name', 'whychinatours' ),
    'singular_name'       => _x( 'Blog', 'Post Type Singular Name', 'whychinatours' ),
    'menu_name'           => esc_html__( 'Blogs', 'whychinatours' ),
    'all_items'           => esc_html__( 'All Blogs', 'whychinatours' ),
    'view_item'           => esc_html__( 'View Blog', 'whychinatours' ),
    'add_new_item'        => esc_html__( 'Add New Blog', 'whychinatours' ),
    'add_new'             => esc_html__( 'New Blog', 'whychinatours' ),
    'edit_item'           => esc_html__( 'Edit Blog', 'whychinatours' ),
    'update_item'         => esc_html__( 'Update Blog', 'whychinatours' ),
    'search_items'        => esc_html__( 'Search Blogs', 'whychinatours' ),
    'not_found'           => esc_html__( 'No Blogs found', 'whychinatours' ),
    'not_found_in_trash'  => esc_html__( 'No Blogs found in Trash', 'whychinatours' ),
);
$args = array(
    'label'               => esc_html__( 'blog', 'whychinatours' ),
    'description'         => esc_html__( 'Blogs information pages', 'whychinatours' ),
    'labels'              => $labels,
    'supports'            => array( 'title', 'editor', 'thumbnail', 'author','excerpt', 'comments'),
    'taxonomies'          => array(),
    'hierarchical'        => false,
    'public'              => true,
    'show_ui'             => true,
    'show_in_menu'        => true,
    'show_in_nav_menus'   => true,
    'show_in_admin_bar'   => true,
    'can_export'          => true,
    'has_archive'         => true,
    'exclude_from_search' => false,
    'publicly_queryable'  => true,
    'capability_type'     => 'blog',
    'capabilities' => array(  
        'edit_post' => 'edit_blog',   
        'edit_posts' => 'edit_blogs',   
        'edit_others_posts' => 'edit_others_blogs',   
        'publish_posts' => 'publish_blogs',   
        'read_post' => 'read_blog',   
        'read_private_posts' => 'read_private_blogs',   
        'delete_post' => 'delete_blog',   
    )  ,
    'rewrite' => array('slug' => 'blogs'),
    'query_var' => true,
);
 
register_post_type( 'blog', $args );	
}
add_action( 'init', 'my_custom_post_blog' );

自定义WordPress角色

WordPress本身有订阅者、投稿者、作者、编辑、管理员的角色,作者在这里定义了一个Bloger的角色,专门用来发布博客。

function Yct_Add_role() 
{   
    if (get_role('bloger')) {
        remove_role('bloger');
    }
    add_role(
        'bloger', 
        __('Bloger', 'whychinatours'),
        array(
            'read' => true, //read权限表示个人信息
            'read_blog' => true,
            'edit_blog'=> true,
            'edit_blogs'=> true,
            'publish_blogs'=> true,
            'delete_blog' => true,
            'upload_files' => true,
            'level_2' => true,
            'level_1' => true,
            'level_0' => true
        )
    );
}
add_action('init', 'Yct_Add_role');

注意,这个Bloger的角色,除了开始在自定义文章类型里面定义的权限之外,还是需要指定‘read’,这样,登录后才会自动跳转到后台页面,不然,登录后跳转页面会提示你没有权限访问该页,这个该页是指个人信息页。

当然,你也可以强行指定跳转路径到编辑Blog类型的文章上,这样的方式也是可以访问后台的。

另外,如果需要上传文件,就加上‘upload_files’。如果Bloger可以编辑其他人的文章,就加上‘edit_others_blogs’,这里叶子没有加。

自定义分类法

如果使用原生态的分类法,作者没有找出可以在写blog时使用原生态分类的方法,所以只能使用自定义分类法。

function my_taxonomies_blog() {
    $labels = array(
        'name'              => _x( 'Blog Tag', 'taxonomy 名称' , 'whychinatours'),
        'singular_name'     => _x( 'blog tag', 'taxonomy 单数名称', 'whychinatours' ),
        'search_items'      => __( 'search blog tag' , 'whychinatours'),
        'all_items'         => __( 'Blog tag' , 'whychinatours'),
        'parent_item'       => __( 'parent blog tag' , 'whychinatours'),
        'parent_item_colon' => __( 'parent blog tag' , 'whychinatours'),
        'edit_item'         => __( 'edit blog tag' , 'whychinatours'),
        'update_item'       => __( 'update blog tag' , 'whychinatours'),
        'add_new_item'      => __( 'add blog tag' , 'whychinatours'),
        'new_item_name'     => __( 'add blog tag' , 'whychinatours'),
        'menu_name'         => __( 'Blog tag' , 'whychinatours'),
    );
    $args = array(
        'labels' => $labels,
        'hierarchical' => false,
        'capabilities' => array(  
            'manage_terms' => 'manage_categories',   
            'edit_terms' => 'manage_categories',   
            'delete_terms' => 'manage_categories',   
            'assign_terms' => 'edit_blogs'
        )  ,
    );
    register_taxonomy( 'blogs-tag', 'blog', $args );
 
}
 
add_action( 'init', 'my_taxonomies_blog', 0 );

注意,关键点在于注册分类法的时候,将分配标签的子权限‘assign_terms’指定到‘edit_blogs’,也就这一句:’assign_terms’ => ‘edit_blogs’

这样的话,自定义角色用户(Bloger)登录后,编辑自定义文章类型(blog)的文章,就是可以分配自定义分类法(blogs-tag)的标签了。

小兽wordpress凭借多年的wordpress企业主题制作经验,坚持以“为用户而生的wordpress主题”为宗旨,累计为10万多家客户提供品质wordpress建站服务,得到了客户的一致好评。我们一直用心对待每一个客户,我们坚信:“善待客户,将会成为终身客户”。小兽wordpress能坚持多年,是因为我们一直诚信。我们明码标价(wordpress做网站需要多少钱),从不忽悠任何客户,我们的报价宗旨:“拒绝暴利,只保留合理的利润”。如果您有网站建设、网站改版、网站维护等方面的需求,请立即咨询右侧在线客服或拨打咨询热线:18907337671,我们会详细为你一一解答你心中的疑难。

相关文章

为什么选择小兽WordPress

哪怕不计成本的时间投入,也绝不辜负任何一个客户。
成就客户成就自我的同时,把这个世界变得再美好一点。

我们的故事

小兽WordPress是2011年开始接触互联网,在这期间用WordPress搭建了一个博客叫小兽WordPress,专门学习WordPress建站。

我们的使命

我们希望用WordPress这款优秀的建站程序帮助每个人搭建一个属于自己的网站,高效率低成本做好互联网营销。

我们的文化

我们专注于把客户的事情做好并且做对,这意味着我们在做决定时会考虑到结果,最重要的是,我们力求真实。

我们的未来

我们将在不久的未来成为国内最好的WordPress工作室,小兽WordPress希望和每一个客户成为朋友,一起见证这个美好未来。

为什么选择小兽WordPress

告诉我你是谁,为你量身定做建站方案

我们深知不同的人做网站的阶段不一样,有的是新手,有的是老手。
我们清楚不同的人做网站的目的不一样,有的是展示,有的是营销。

如何让线上业务更上一层楼

还没有WordPress网站

还没有WordPress网站

不管你从事什么行业,WordPress都会为你提供一个专业的主题模板。在WordPress市场上有成千上万的免费主题,适合很多中小企业。

查看所有模板
已经有WordPress网站

已经有WordPress网站

小兽WordPress诚邀你一起学习WordPress,愿与各方携手升级改善您的WordPress网站,一起交流网站加速,网站优化等问题。

马上交个朋友
微信联系
chat 扫码联系
模板建站
挑选模板
网站定制
免费诊断
咨询热线
咨询热线

189-0733-7671

返回顶部