it-swarm.com.de

Wie synchronisiere ich Benutzerprofilfelder in Multisite?

Ich benutze WordPress Multisite. Ich habe das Multisite User Management Plugin installiert.

Wenn sich ein Benutzer auf meinen Hauptsites registriert, wird dieser Benutzer automatisch auf allen meinen Sites hinzugefügt.

Mein Problem, es kopiert nicht die Profildaten. Ich möchte nicht, dass meine Benutzer auf allen 50 Websites die gleichen Daten eingeben. Steht also ein Code zur Verfügung, um die Daten zu synchronisieren?

Ich meine, wenn ein Benutzer die Profilfelder in den Hauptsites ausfüllt, sollten alle Untersites mit demselben Wert aktualisiert werden. Wenn der Benutzer das Profil in site10.example.com bearbeitet, sollte es auf allen Websites synchronisiert und aktualisiert werden. Ist es möglich?

Vielen Dank

3
Giri

Dieser Code funktioniert, aber bitte beachten Sie, dass er so bereitgestellt wird, wie er ist.
Es wurde nur in einer lokalen Host-Entwicklung getestet.

Es gibt eine Funktion extrahiert aus dem Plugin Multisite User Management , die auf dem basiert/get_blog_list Funktion, die veraltet ist.

Keine Alternative verfügbar. Aus Performancegründen wird diese Funktion nicht empfohlen.

Das Benutzer-Meta muss einzeln überprüft werden, d. H .: Ziel, Jabber usw.

add_action( 'admin_init', 'wpse_38421_init');

function wpse_38421_init() 
{
    add_action( 'personal_options_update', 'wpse_38421_save_profile_fields' );
    add_action( 'edit_user_profile_update', 'wpse_38421_save_profile_fields' );
}

function wpse_38421_save_profile_fields( $user_id ) 
{

    $user_url = ( isset( $_POST['url'] ) && '' !== $_POST['url'] ) 
                ? $_POST['url'] : false;

    $user_aim = ( isset( $_POST['aim'] ) && '' !== $_POST['aim'] ) 
                ? $_POST['aim'] : false;

    $user_yim = ( isset( $_POST['yim'] ) && '' !== $_POST['yim'] ) 
                ? $_POST['yim'] : false;

    $user_Jabber = ( isset( $_POST['Jabber'] ) && '' !== $_POST['Jabber'] ) 
                ? $_POST['Jabber'] : false;

    $current_site = get_current_blog_id();
    $all_blogs = wpse_38421_get_blog_list( 0, 'all' );

    foreach ( $all_blogs as $key => $blog ) 
    { 
        if ( 
            is_user_member_of_blog( $user_id, $blog[ 'blog_id' ] ) 
            && $current_site != $blog[ 'blog_id' ] 
            )
            continue;

        switch_to_blog( $blog[ 'blog_id' ] );

        if ( $user_url ) 
            update_usermeta( $user_id, 'url', $user_url );

        if ( $user_aim ) 
            update_usermeta( $user_id, 'aim', $user_aim );

        if ( $user_yim ) 
            update_usermeta( $user_id, 'yim', $user_yim );

        if ( $user_Jabber ) 
            update_usermeta( $user_id, 'Jabber', $user_Jabber );
    }

    switch_to_blog( $current_site );
}

/**
 * Based on the deprecated WPMU get_blog_list function. 
 * 
 * Except this function gets all blogs, even if they are marked as mature and private.
 *
 * Extracted from the plugin http://wordpress.org/extend/plugins/multisite-user-management/
 */
function wpse_38421_get_blog_list( $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 );
}
1
brasofilo