仅允许作者在他们在WordPress中创建的类别中发表帖子

时间:2016-02-10 作者:Mandie

我正在寻找一种方法,允许具有指定WordPress角色的用户(在我的情况下是作者)创建新类别,然后自动限制为仅在这些类别中发布或默认“未分类”

本质上,我正在创建一个故事构建工具,用户可以在其中添加新的“故事”或“系列”(我已重命名“帖子”和“类别”标签),因此他们需要能够创建一个只有他们才能添加的新“系列”。

我尝试了许多插件,这些插件限制在某些类别内发布,但它们都需要管理员设置权限,我需要在创建类别时自动分配权限。

(如果相关的话,我不使用BuddyPress,如果可能的话,我宁愿不去多个站点)。

谢谢

1 个回复
最合适的回答,由SO网友:Sören Wrede 整理而成

这个小插件只显示用户角色“author”自己的类别&;职位。因此,您可以根据自己的帖子类型和分类对其进行编辑。

/*
Plugin Name: Show own categories
Description: This plugin shows the user role \'author\' only its own categories & posts
Version:     0.1
Author:      Soren Wrede
License:     GPL2
License URI: https://www.gnu.org/licenses/gpl-2.0.html
*/

class SW_Category_Restriction{
    private $user_cats = NULL;

    public function __construct(){
        //Save author ID for category
        add_action( \'create_category\', array( &$this, \'save_category_author\' ) );
        //Set manage_categories cap for \'Author\'
        add_action( \'admin_init\', array( &$this, \'add_author_cap_categories\' ) );
        //Remove manage_categories  capfor \'Author\'
        register_deactivation_hook( __FILE__, array( &$this, \'remove_author_cap_categories\' ) );
        //Filter categorys in new-post, edit-post, edit-categories
        add_action( \'admin_print_scripts-post-new.php\', array( &$this, \'filter_post_page\' ) );
        add_action( \'admin_print_scripts-post.php\', array( &$this, \'filter_post_page\' ) );
        add_action( \'admin_print_scripts-edit-tags.php\', array( &$this, \'filter_post_page\' ) );
        //just show own posts
        global $pagenow;
        if ( $pagenow == \'edit.php\' )
            add_filter( \'pre_get_posts\', array( &$this, \'filter_edit_page\' ) );
    }

    public function save_category_author( $term_id ) {
        $user_id = get_current_user_id();
        add_term_meta( $term_id, \'author\', $user_id );
    }

    public function get_user_cats( $user_id ) {
        $args = [
            \'hide_empty\' => false,
            \'meta_query\' => [
                [
                    \'key\' => \'author\',
                    \'value\' => $user_id,
                ]
            ]
        ];
        $terms = get_terms( \'category\', $args );
        $ids = \'-1,\';
        foreach ($terms as $term ) {
            $ids .= $term->term_id . \',\';
        }
        $ids = substr($ids, 0, -1);
        $this->user_cats = $ids;
    }

    public function add_author_cap_categories() {
        $role = get_role( \'author\' );
        $role->add_cap( \'manage_categories\' );
    }

    public function remove_author_cap_categories() {
        $role = get_role( \'author\' );
        $role->remove_cap( \'manage_categories\' );
    }

    public function exclusions( $exclusions ){
        $exclusions .= " AND ( t.term_id IN ( $this->user_cats ) OR tt.taxonomy NOT IN ( \'category\' ) )";
        return $exclusions;
    }

    public function filter_post_page() {
        //check post-type 
        $screen = get_current_screen();
        if ( $screen->post_type != \'post\' )
            return;

        //just Author and lower
        if ( current_user_can(\'delete_others_posts\') )
            return;

        $user_id = get_current_user_id();
        $this->get_user_cats( $user_id );

        if ( empty( $this->user_cats ) )
            return;

        add_filter( \'list_terms_exclusions\', array( &$this, \'exclusions\' ) );
    }

    public function filter_edit_page( $query ) {
        if ( current_user_can(\'delete_others_posts\') )
            return;     
        $query->set( \'author\', get_current_user_id() );

        return $query;
    }

}

new SW_Category_Restriction();

相关推荐

显示作者姓名PHP(自制插件)

我有一个需要帮助的问题,因为我自己找不到解决办法。我接管了一个网站,之前有人在那里创建了一个自制插件。。使用默认插件“Contact Form 7”,用户可以在页面上创建帖子。()https://gyazo.com/c8b20adecacd90fb9bfe72ad2138a980 )关于自行创建的插件“Contact Form 7 extender”,帖子是通过PHP代码在后台生成的(https://gyazo.com/115a6c7c9afafd2970b66fd421ca76a3)其工作原理如下:如果