naoya
フォーラムへの返信
-
フォーラム: 自作品の告知
返信が含まれるトピック: ファイル共有プラグインフォーラム: プラグイン
返信が含まれるトピック: 既存のオプション値にデータを追加したいjim912さん
早速教えていただいたヒントを元に検証してみた所、
問題が解決されました!第二引数の$postを使い
if ($post->post_type !== 'revision')//リビジョンでない場合 ・ ・ ・
としたところ、必ず一つずつ要素が追加されるようになりました。
また反対の検証もしまして、
if ($post->post_type == 'revision')//リビジョンの場合
としても一つずつ要素の追加がされました。
最初のコードで1つのときも2つの時もあったのは
タイムラグが無い事による配列の上書きだったと考えられますね。この度は大変勉強になりました!!
よいプラグインができるようこれからも勉強して行きます^^
ありがとうございました!フォーラム: プラグイン
返信が含まれるトピック: 既存のオプション値にデータを追加したいjim912さん
お返事ありがとうございます。
基本的にはリンク先の用例コードを使用して新しいプラグインの開発を行っています。
既存のプラグインは全て無効化しています。以下リンク先コードを途中一部抜粋したものを元に、
テスト用データをデータベースに保存します。↓/* 投稿を保存した際、カスタムデータも保存する */ function myplugin_save_postdata( $post_id ) { // データが先ほど作った編集フォームのから適切な認証とともに送られてきたかどうかを確認。 // save_post は他の時にも起動する場合がある。 if ( !wp_verify_nonce( $_POST['myplugin_noncename'], plugin_basename(__FILE__) )) { return $post_id; } // 自動保存ルーチンかどうかチェック。そうだった場合はフォームを送信しない(何もしない) if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return $post_id; // パーミッションチェック if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id ) ) return $post_id; } else { if ( !current_user_can( 'edit_post', $post_id ) ) return $post_id; } // 承認ができたのでデータを探して保存 $opt_name = 'test_name'; $opt_val = get_option( $opt_name );//オプションの値を取得する(既に連想配列の状態と仮定) $time = time();//テスト用データ $opt_val += array('hoge-'.$time => $time);//配列にデータを追加 update_option($opt_name,$opt_val);//オプションの値を更新 } ?>
このコードを実行するとデータベースに2つの異なる時間の配列が記録されます。
「承認ができたのでデータを探して保存」の部分を実際のPOSTデータに置き換えると
$opt_name = 'test_name'; $opt_val = get_option( $opt_name );//オプションの値を取得する(既に連想配列の状態と仮定) $mydata = $_POST['myplugin_new_field'];//POSTデータ=投稿ID番号 $opt_val += array('hoge-'.$mydata => $mydata);//配列にデータを追加 update_option($opt_name,$opt_val);//オプションの値を更新
とした場合、配列に追加されるのは
array('hoge-'.$mydata => $mydata);
の一つのみです。しかし実際にはtime()と違い値が変わらないために上書きされて
1つの配列が追加されているように見えるだけではないかと思っています。自動保存やリビジョンは怪しい気がしています。
ですがリンク元のコードのように自動保存時は関数が止まるはずなので
(コードがあっていればの話ですが)
別の理由もあるのかな?とも思ったり。。配列キーが動的になったり、連想配列ではなく通常の配列のときに
キーが連番だったりすると同じような挙動になり、
今後投稿IDが連番だったりした事を考えると
同じ挙動でプラグインが正しく動作しない可能性があるので
解決できればと思ったのですが。もう少し調べてみます。
引き続きお力添え宜しくお願いします。フォーラム: 使い方全般
返信が含まれるトピック: firefoxでのみ固定ページで別ページの内容が表示される