【问题标题】:How to let a user level edit custom post type made by anybody?如何让用户级别编辑任何人制作的自定义帖子类型?
【发布时间】:2014-04-02 08:27:49
【问题描述】:

我不是 PHP/WordPress 方面的专家,我正在运行一个具有多个用户级别的 WP 站点。我已经创建了一个名为“race”的自定义帖子类型。我希望贡献者级别能够编辑任何其他用户发布的“比赛”,而不仅仅是他们自己。

目前,只有作者可以这样做,而贡献者只能编辑自己发布的“种族”。

自定义帖子类型是由CPT UI plugin 制作的,我没有自己编码。

我有一个用户角色/功能插件(“用户角色编辑器”和“成员”),并且我知道在注册功能后如何使用它们,但我不知道如何为自定义类型设置功能发帖。

我认为this entry is related to my problem(最后一段代码),但我不知道在帖子类型已经存在的情况下如何适应它,以及代码应该插入到哪些文件中。

PS。作为第二步,我希望编辑在任何时候由贡献者进行时都必须得到作者的批准。目前,如果贡献者编辑他自己的“种族”,更改会立即发布。目前仅初始发布需要批准。

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

    Wordpress 有一个过滤器,它用于检查您的能力,称为“user_has_cap”。我们可以通过这个为Contributor添加“edit_other_posts”和“edit_published_posts”。我这里有一个代码给你,你可以把它放在你的主题 functions.php 文件或插件中的任何 php 文件中,试试看:

    function allow_user_edit_race_post( $all_caps, $caps, $name, $user ) {
        if( is_user_logged_in() && $name[0] == 'edit_post' ) {
            global $current_user;
            $post = get_post( $name[2] );
            if( in_array('contributor', $current_user->roles ) && ! is_wp_error($post) && $post->post_type == 'race' ) {
                $all_caps['edit_others_posts'] = true;
                $all_caps['edit_published_posts'] = true;
            }
        }
        return $all_caps;
    }
    add_filter( 'user_has_cap', 'allow_user_edit_race_post', 10, 4 );
    

    希望对您有所帮助!

    【讨论】:

      【解决方案2】:

      将这段代码添加到您的函数文件中:

      function wp_change_cap_type() {
         global $wp_post_types;
         $wp_post_types['race']->capability_type = 'race';
      }
      add_action('init', 'wp_change_cap_type');
      

      然后将“edit_others_races”和“edit_races”功能分配给贡献者角色和您希望拥有该功能的任何其他人(编辑者、管理员等)。不要将“publish_races”分配给贡献者角色,因为只有作者才应该这样做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-29
        • 1970-01-01
        • 1970-01-01
        • 2017-04-04
        • 1970-01-01
        • 2018-04-12
        • 2019-01-25
        相关资源
        最近更新 更多