質問: マルチサイトでユーザープロファイルフィールドを同期する方法 私はワードプレスマルチサイトを使用しています。 マルチサイトユーザー管理 プラグインをインストールしました。ユーザーが私のメインサイトに登録すると、そのユーザーは自動的に私のすべてのサイトに追加されます。私の問題はそれがプロフィールデータをコピーしないことです。ユーザーが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 ); }