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