如何在WordPress中启用自定义帖子类型以自定义用户角色

时间:2018-01-04 作者:ashanrupasinghe

我使用WordPress创建了一个名为“课程文档”的自定义帖子类型Custom Post Type UI 插件。此外,我还创建了一个名为Teacher的新用户角色。

add_role(\'rpt_teacher\',
            \'Teacher\',
            array(
                \'read\' => true,
                \'edit_posts\' => false,
                \'delete_posts\' => false,
                \'publish_posts\' => false,
                \'upload_files\' => true,
            )
        );
现在我想在教师仪表板导航菜单中启用自定义帖子类型。我在函数中使用了以下代码。PHP但什么都没发生。如何解决我的问题?

add_action(\'admin_init\',\'rpt_add_role_caps\',999);
    /**
    add teachers capability
    */
    function rpt_add_role_caps() {

        // Add the roles you\'d like to administer the custom post types
        $roles = array(\'rpt_teacher\',\'editor\',\'administrator\');

        // Loop through each role and assign capabilities
        foreach($roles as $the_role) {    
             $role = get_role($the_role);               
             $role->add_cap( \'read\' );
             $role->add_cap( \'read_course_document\');
             $role->add_cap( \'edit_course_document\' );
             $role->add_cap( \'edit_course_documents\' );
             $role->add_cap( \'edit_published_course_documents\' );
             $role->add_cap( \'publish_course_documents\' );
             $role->add_cap( \'delete_published_course_documents\' );
        }
        }

4 个回复
最合适的回答,由SO网友:Bikash Waiba 整理而成

我认为插件没有添加您在中使用的功能add_cap 注册帖子类型时。

您可以通过向主题添加代码来修改注册帖子类型functions.php 文件你可以这样做。

/**
 * Overwrite args of custom post type registered by plugin
 */
add_filter( \'register_post_type_args\', \'change_capabilities_of_course_document\' , 10, 2 );

function change_capabilities_of_course_document( $args, $post_type ){

 // Do not filter any other post type
 if ( \'course_document\' !== $post_type ) {

     // Give other post_types their original arguments
     return $args;

 }

 // Change the capabilities of the "course_document" post_type
 $args[\'capabilities\'] = array(
            \'edit_post\' => \'edit_course_document\',
            \'edit_posts\' => \'edit_course_documents\',
            \'edit_others_posts\' => \'edit_other_course_documents\',
            \'publish_posts\' => \'publish_course_documents\',
            \'read_post\' => \'read_course_document\',
            \'read_private_posts\' => \'read_private_course_documents\',
            \'delete_post\' => \'delete_course_document\'
        );

  // Give the course_document post type it\'s arguments
  return $args;

}
那你就可以

/**
add teachers capability
*/
add_action(\'admin_init\',\'rpt_add_role_caps\',999);

function rpt_add_role_caps() {

    $role = get_role(\'teacher\');               
    $role->add_cap( \'read_course_document\');
    $role->add_cap( \'edit_course_document\' );
    $role->add_cap( \'edit_course_documents\' );
    $role->add_cap( \'edit_other_course_documents\' );
    $role->add_cap( \'edit_published_course_documents\' );
    $role->add_cap( \'publish_course_documents\' );
    $role->add_cap( \'read_private_course_documents\' );
    $role->add_cap( \'delete_course_document\' );


}
您不需要向administrator和editor添加功能,因为capability_typepost 默认情况下,通过此插件注册自定义帖子类型时。如果您喜欢定制,可以更改capability_type 基于其他岗位类型。

注意:确保Show in Menu 设置为true. 是的true 默认情况下,在该插件中。

SO网友:Sid

在我看来,你走的是对的。您创建了一个用户并为其分配了新功能。您没有指定新功能将用于编辑自定义帖子类型。

我从来没有使用过插件来创建自定义帖子类型,所以我不知道如何使用插件来创建自定义帖子类型。但是,如果您愿意通过代码创建您的CPT,您可以使用以下方法:

add_action( \'init\', \'psp_register_cpt_projects\');
function psp_register_cpt_projects() {
     $args = array(
 \'label\'               => __( \'course_documents\', \'course_documents\' ),
 \'description\'         => __( \'Course document\', \'course_document\' ),
 \'supports\'            => array( \'title\', \'comments\', \'revisions\', ),
 \'hierarchical\'        => false,
 \'public\'              => true,
 \'show_ui\'             => true,
 \'capability_type\'     => array(\'course_document\',\'course_documents\'),
 \'map_meta_cap\'        => true,
 );
 register_post_type( \'course_documents\', $args );
}
注意:这只是创建CPT的基本代码。请阅读this 抄本中的文件,以彻底理解它。

如果这对你有帮助,请告诉我。

SO网友:Dale Clifford

我只允许所有用户在“作者”选择中显示:

add_filter( \'wp_dropdown_users_args\', \'add_subscribers_to_dropdown\', 10, 2 );
function add_subscribers_to_dropdown( $query_args, $r ) {
    $query_args[\'who\'] = \'\';
    return $query_args;
}

SO网友:etudor

只有一件事我花了几个小时才值得一提。如果您具有自定义功能,并且希望更新自定义角色功能,请不要在add\\u role函数中执行此操作。

例如,这不会更新角色,因为它已经存在:

    $role = add_role(
        \'client\',
        \'Client\',
        array(
            \'read\' => true,
            \'edit_posts\' => true,
            \'delete_posts\' => false,
            CAP_READ_ADDRESS => true,
            CAP_DELETE_ADDRESS => true,
            CAP_EDIT_OTHER_ADDRESSES => true,
            CAP_READ_PRIVATE_ADDRESS => true,
            CAP_EDIT_ADDRESSES => true,
            CAP_PUBLISH_ADDRESS => true,
            CAP_EDIT_ADDRESS => true
        )
在任何功能更新之后,我的客户端角色都不会得到更新,因为它已经存在。

向自定义角色添加自定义功能最安全的方法是获取该角色并在add\\u role之后添加它们

function addCaps() {
    $role = get_role(\'client\');
    $role->add_cap(CAP_READ_ADDRESS, true);
    $role->add_cap(CAP_EDIT_ADDRESSES, true);
}

add_action(\'admin_init\', \'addCaps\');

结束

相关推荐