私はワードプレスマルチサイトを使用しています。 マルチサイトユーザー管理 プラグインをインストールしました。
ユーザーが私のメインサイトに登録すると、そのユーザーは自動的に私のすべてのサイトに追加されます。
私の問題はそれがプロフィールデータをコピーしないことです。ユーザーが50のサイトすべてに同じデータを入力したくない。それで、データを同期するために利用できるコードはありますか?
ユーザーがメインサイトのプロファイルフィールドを埋めると、すべてのサブサイトが同じ値で更新されるはずです。同様に、ユーザーがsite10.example.com
内のプロファイルを編集した場合も、すべてのサイトで同期され更新されるはずです。出来ますか?
ありがとう
このコードは機能しますが、現状のまま提供されていることに注意してください。
これはlocalhostの開発でのみテストされていました。
プラグインから抽出された がありますMultisite User Management。これは に基づいています。/get_blog_list
function、これは廃止予定です。
代替案はありません。パフォーマンス上の理由から、この機能はお勧めできません。
ユーザーmetaは個別にチェックする必要があります。つまり、Aim、Jabberなどです。
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 );
}