外贸营销

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

导语:作者在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)的标签了。

上一篇下一篇
标签

有问
必答