フォーラムへの返信

15件の返信を表示中 - 1 - 15件目 (全15件中)
  • トピック投稿者 plum0710

    (@plum0710)

    >Daisuke Takahashi様
    コードの改良、ありがとうございます。
    ご協力いただき、本当に助かりました。

    >wpmubp
    ありがとうございます。
    参考にさせていただきます。

    こちらのフォーラムは解決とさせていただきます。
    本当にありがとうございました。

    トピック投稿者 plum0710

    (@plum0710)

    一応解決しました。

    一時的な回避策かもしれませんが、コードを以下のように変更しました。

    function synchro_roles_add ( $user_id ) {
    	$role =  get_user_meta( $user_id, 'wp_capabilities' );
    	$role = $role[0];
    	add_user_meta( $user_id, 'wp2_capabilities', $role );
    }
    add_action( 'user_register', 'synchro_roles_add' );
    
    function synchro_roles_update ( $user_id ) {
    	$role =  get_user_meta( $user_id, 'wp_capabilities' );
    	$role = $role[0];
    	update_user_meta( $user_id, 'wp2_capabilities', $role );
    }
    add_action( 'profile_update', 'synchro_roles_update' );

    アクションフックのinitとdie()を組み合わせてデバッグ作業できることを教示していただいたため、色々と試してみたら、どうもgetする際にもとの状態に戻らないということが判明しました。

    これでいいのか分かりませんが、解決にご協力いただき、ありがとうございました。

    トピック投稿者 plum0710

    (@plum0710)

    作成ありがとうございます。

    結果は以下のようになりました。

    Static String
    bool(true)
    bool(true)
    array(1) {
      ["contributor"]=>
      bool(true)
    }
    array(1) {
      ["contributor"]=>
      bool(true)
    }
    Meta by current uid
    (Data)
    array(1) {
      [0]=>
      array(1) {
        ["administrator"]=>
        bool(true)
      }
    }
    トピック投稿者 plum0710

    (@plum0710)

    削除の件、かしこまりました。

    ホスティングは、、、さくらサーバという回答で大丈夫でしょうか?
    OSバージョンは「FreeBSD 9.1-RELEASE-p15 amd64」と記載してあります。
    その他ソフトウェアのバージョンは以下の通りです。
    Apache:2.2.25
    MySQL:5.5
    PHP:5.4.29

    トピック投稿者 plum0710

    (@plum0710)

    コードありがとうございます。

    真っ白な画面にtruefalseと出力されました。

    トピック投稿者 plum0710

    (@plum0710)

    すみません追記です。

    プラグインは現在すべて無効化しています。

    p.s.
    ツイッターを拝見しました。
    ご協力、誠にありがとうございます。試験頑張ってください。

    トピック投稿者 plum0710

    (@plum0710)

    回答ありがとうございます。

    サーバはさくら、データベースは文字コード以外に変更はしていません。
    (データベース文字コード:UTF-8)
    テーマ:Twenty Fourteen

    また設定に関してはwp-config.phpの

    /**
    * ローカル言語 - このパッケージでは初期値として 'ja' (日本語 UTF-8) が設定されています。
    *
    * WordPress のローカル言語を設定します。設定した言語に対応する MO ファイルが
    * wp-content/languages にインストールされている必要があります。例えば de.mo を
    * wp-content/languages にインストールし WPLANG を 'de' に設定することでドイツ語がサポートされます。
    */
    define ('WPLANG', 'ja');

    の下に

    define('CUSTOM_USER_TABLE', 'wp_users');
    define('CUSTOM_USER_META_TABLE', 'wp_usermeta');

    を追加したことに加えて、function.phpに記載した作成した関数を作成したのみです。

    また、いただいた回避策に関してですが、wp2_capabilitiesの中身が空白の状態になり、権限グループの共有はできませんでした。

    トピック投稿者 plum0710

    (@plum0710)

    回答ありがとうございます。
    またCoreファイルの修正依頼ありがとうございます。

    function maybe_serialize( $data ) {
    	if ( is_array( $data ) || is_object( $data ) )
    		return serialize( $data );
    
    	// Double serialization is required for backward compatibility.
    	// See http://core.trac.wordpress.org/ticket/12930
    	if ( is_serialized( $data, false ) )
    		return serialize( $data );
    
    	return $data;
    }

    add_user_meta関数の中で使用されているmaybe_serialize関数(上記)を見てみました。

    Daisuke Takahashi様の提案に従い、unserializeをして配列に戻したとしても、1回目のif文で正常なシリアライズが施され、2回目のif文のis_serialized関数で「シリアライズされていない」という判断をされ、更にシリアライズが施されるため、手の打ちようがないということがよくわかりました。

    解決策としては
    ・アップデートを待ってそれに合わせたプラグインを作成する
    ・手でCoreファイルを書き換える(こちらはあまりしたくないです)

    くらいでしょうかね。。。

    トピック投稿者 plum0710

    (@plum0710)

    回答ありがとうございます。

    Daisuke Takahashi様の回答が「シリアライズ化されてDBに格納されていた文字列をPHPの配列に変換して$roleに格納するという操作をすればいいのではないか」という提案と解釈して返信しています。

    get_user_meta関数が実行しているget_metadata関数を見てみると出力時にmaybe_unserialize関数を通しており、get_user_metaの時点でシリアライズ化は解除されているため、maybe_unserialize()でgetした結果のシリアライズを解除しても解決には至りませんでした。

    トピック投稿者 plum0710

    (@plum0710)

    回答ありがとうございます。
    ご提案のフローを記述してみました。今のところ登録時のみのものです。

    AのDBのテーブルPrefixが「wp_」で、
    BのDBのテーブルPrefixが「wp2_」としています。

    サイトAに以下の関数を作成しましたが、うまくいきません。

    function synchro_roles ( $user_id ) {
    	$role =  get_user_meta( $user_id, 'wp_capabilities' );
    	add_user_meta( $user_id, 'wp2_capabilities', $role );
    }
    
    add_action( 'user_register', 'synchro_roles' );

    原因は以下のようにwpからwp2に値を移す際に余分なシリアライズが入ることです。
    wp_capabilitiesのmeta_value → a:1:{s:11:”contributor”;b:1;}
    wp2_capabilitiesのmeta_value → a:1:{i:0;a:1:{s:11:”contributor”;b:1;}}

    上記のことがわかっていながら対策が打てない状況です。
    大変申し訳ないのですが、アドバイス・打開策をいただけないでしょうか?

    トピック投稿者 plum0710

    (@plum0710)

    申し訳ありません。自己解決しました。

    supportsのeditorを抜くとmultipleButtonが機能しなくなるようです。

    フォーラム: 使い方全般
    返信が含まれるトピック: wp_list_pagesのdepthが効かなくなりました。。。
    トピック投稿者 plum0710

    (@plum0710)

    ありがとうございます。上記コードで上手くいきました!
    どうやらwp_list_pageのechoが良くなかったようです。

    本当にありがとうございます!

    フォーラム: 使い方全般
    返信が含まれるトピック: wp_list_pagesのdepthが効かなくなりました。。。
    トピック投稿者 plum0710

    (@plum0710)

    >>nobitaさん

    申し訳ありません。
    問題のある部分を抜粋していたので書き忘れです。。。

    下記のようになっております!

    function simple_sitemap(){
      global $wpdb;
    	$sitemap_ID = strval( get_page_by_path('sitemap') -> ID );
    	$request_ID = strval( get_page_by_path('request') -> ID );
    	$exclude_ID = $sitemap_ID.",".$request_ID;
    	$args = array(
    		'depth'		=> 2,
    		'show_date'	=> '',
    		'date_format'	=> get_option('date_format'),
    		'exclude'		=> $exclude_ID,
    		'include'		=> NULL,
    		'child_of'	=> 0,
    		'title_li'	=> '',
    		'echo'		=> 1,
    		'authors'		=> NULL,
    		'sort_column'	=> 'menu_order, post_title',
    		'link_before'	=> NULL,
    		'link_after'	=> NULL,
    		'exclude_tree'	=> NULL ); 
    
    	echo '<div id="sitemap"><ul>';
    		wp_list_pages($args);
    	echo '</ul>';
    
    //カスタム投稿用
    //	スラッグからカスタム投稿名をを取得
    	$blog_title	= get_post_type_object('blog')	-> labels -> name;
    	$result_title	= get_post_type_object('result')-> labels -> name;
    	$voice_title	= get_post_type_object('voice')	-> labels -> name;
    //	スラッグからアーカイブ用のリンクを取得しつつaタグを作成
    	$blog_link	= "<a href=".get_post_type_archive_link( 'blog' ).">".$blog_title."</a>";
    	$result_link	= "<a href=".get_post_type_archive_link( 'result' ).">".$result_title."</a>";
    	$voice_link	= "<a href=".get_post_type_archive_link( 'voice' ).">".$voice_title."</a>";
    	echo '<ul><li>';
    	echo $blog_link;
    	echo '</li></ul>';
    	echo '<ul><li>';
     	echo $result_link;
    	echo '</li></ul>';
    	echo '<ul><li>';
    	echo $voice_link;
    	echo '</li></ul>';
    
    //サイトマップ・お問い合わせ用(IDからリンクを取得・スラッグからページのタイトルを取得)
    //	スラッグから固定ページ名を取得
    	$request_title = get_page_by_path('request') -> post_title;
    	$sitemap_title = get_page_by_path('sitemap') -> post_title;
    //	スラッグから取得したIDからリンクを取得しつつaタグを作成
    	$request_link = "<a href=".get_category_link( $request_ID ).">".$request_title."</a>";
    	$sitemap_link = "<a href=".get_category_link( $sitemap_ID ).">".$sitemap_title."</a>";
    	echo '<ul><li>';
    	echo $request_link;
    	echo '</li></ul>';
    	echo '<ul><li>';
     	echo $sitemap_link;
    	echo '</li></ul>';
    
    	echo '</div>';
    }
     add_shortcode('sitemap', 'simple_sitemap');

    汚くて申し訳ありませんが、よろしくお願いします。

    フォーラム: 使い方全般
    返信が含まれるトピック: wp_list_pagesのdepthが効かなくなりました。。。
    トピック投稿者 plum0710

    (@plum0710)

    なるほど。大変失礼いたしました。。。

    function simple_sitemap(){
      global $wpdb;
    	$sitemap_ID = strval( get_page_by_path('sitemap') -> ID );
    	$request_ID = strval( get_page_by_path('request') -> ID );
    	$exclude_ID = $sitemap_ID.",".$request_ID;
    	$args = array(
    		'depth'		=> 2,
    		'show_date'	=> '',
    		'date_format'	=> get_option('date_format'),
    		'exclude'		=> $exclude_ID,
    		'include'		=> NULL,
    		'child_of'	=> 0,
    		'title_li'	=> '',
    		'echo'		=> 1,
    		'authors'		=> NULL,
    		'sort_column'	=> 'menu_order, post_title',
    		'link_before'	=> NULL,
    		'link_after'	=> NULL,
    		'exclude_tree'	=> NULL ); 
    
    	echo '<div id="sitemap"><ul>';
    		wp_list_pages($args);
    	echo '</ul>';
    
     add_shortcode('sitemap', 'simple_sitemap');

    以上のようなコードを書いています。
    よろしくお願いします!

    トピック投稿者 plum0710

    (@plum0710)

    申し訳ありません。
    初投稿なものでコードの囲いこみがうまくできておらず、見にくいです。。。

15件の返信を表示中 - 1 - 15件目 (全15件中)