簡體   English   中英

在Wordpress中為多個站點創建編輯器

[英]Creating a editor for multiple sites in wordpress

在Wordpress多站點平台上,通常,如果我創建“編輯者”用戶帳戶,則該用戶只能對正在創建的站點執行職責。

但是,我想創建一個特殊的編輯者帳戶,該帳戶可以在所有站點(多個站點)上執行編輯任務

誰能指導我如何創建這樣的用戶?

我認為您可以使用插件多站點用戶管理來完成所需的工作 這應該允許您將用戶和角色復制到所需的站點...,也可以創建一個新的管理員帳戶。

我從Felipe的答案中檢查了Multisite User Management插件的代碼,並決定進行概念驗證。

以下僅網絡插件添加了以下選項:

option in /wp-admin/network/settings.php

當我們在下拉列表中選擇一個用戶並更新設置時,該用戶將作為編輯者添加到網絡的所有站點中。
創建新站點時,也會添加該用戶。

重要:

  • 沒有undo功能,更新設置后,您只能逐站點刪除/更改用戶。
<?php
/*
Plugin Name: (SO) Multisite Super Editor
Plugin URI: https://stackoverflow.com/q/23623835/1287812
Description: Add a user as Editor in all sites of the network
Author: brasofilo
Network: true
Version: 1.0
*/
B5F_Multisite_Super_Editor::init();

class B5F_Multisite_Super_Editor 
{
    static $option = 'super_editor';

    static function init() 
    {
        add_action( 'wpmu_new_blog', array( __CLASS__, 'new_site'), 10, 6 );
        add_action( 'wpmu_options', array( __CLASS__, 'options_network' ) );
        add_action( 'update_wpmu_options', array( __CLASS__, 'options_update' ) );
    }

    /**
     * Add Super Editor to newly created blogs
     */
    static function new_site( $blog_id, $user_id, $domain, $path, $site_id, $meta )
    {
        $saved =  get_site_option( self::$option );
        add_user_to_blog( $blog_id, $saved, 'editor' );
    }

    /**
     * Outputs the user selection on the 'Network Admin | Settings' page. 
     */
    static function options_network()
    {
        echo '<h3>' . __( 'Super Editor' ). '</h3>';
        $users = get_users();
        $supers = get_site_option( 'site_admins', array('admin') );
        $saved =  get_site_option( self::$option );
        $selected = $saved ? $saved : '';
        $exclude = array();

        // site_admins only has the user_login, hence this loop to get the IDs
        foreach( $users as $user )
            if( in_array( $user->data->user_login, $supers ) )
                $exclude[] = $user->data->ID;

        wp_dropdown_users( array( 
            'blog_id' => 0, // Default is current blog
            'exclude' => $exclude, 
            'name' => 'post_author', 
            'multi' => true, 
            'show_option_none' => __('None'), 
            'name' => 'b5f_default_user_role', 
            'selected' => $selected 
        ));
    }

    /**
     * UPDATE Super Editor option and APPLY the role in all sites
     */
    static function options_update()
    {
        if( !isset( $_POST[ 'b5f_default_user_role' ] ) )
            return;

        $user_id = $_POST[ 'b5f_default_user_role' ];
        $saved =  get_site_option( self::$option );
        if( $saved == $user_id )
            return;

        update_site_option( self::$option, $user_id );  
        foreach( self::get_blogs( 0, 'all' ) as $key => $blog ) 
            add_user_to_blog( $blog[ 'blog_id' ], $user_id, 'editor' );
    }

    /**
     * Based on the deprecated WPMU get_blog_list function. 
     * 
     * Except this function gets all blogs, even if they are marked as mature and private.
     */
    static function get_blogs( $start = 0, $num = 10 ) 
    {
        global $wpdb;

        $blogs = $wpdb->get_results( $wpdb->prepare( "SELECT blog_id, domain, path FROM $wpdb->blogs WHERE site_id = %d AND archived = '0' AND spam = '0' AND deleted = '0' ORDER BY registered DESC", $wpdb->siteid ), ARRAY_A );

        foreach ( (array) $blogs as $details ) {
            $blog_list[ $details[ 'blog_id' ] ] = $details;
            $blog_list[ $details[ 'blog_id' ] ]['postcount'] = $wpdb->get_var( "SELECT COUNT(ID) FROM " . $wpdb->get_blog_prefix( $details['blog_id'] ). "posts WHERE post_status='publish' AND post_type='post'" );
        }
        unset( $blogs );
        $blogs = $blog_list;

        if ( false == is_array( $blogs ) )
            return array();

        if ( $num == 'all' )
            return array_slice( $blogs, $start, count( $blogs ) );
        else
            return array_slice( $blogs, $start, $num );
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM