wordpressで予約投稿した時にカスタムフィールドの値が消えてしまうエラーが起きた時の対処法

web制作

読了の目安時間: 47

最近、wordpressのカスタムフィールドで自作設定をしてみたところ、通常公開する分には問題なく動作していたのですが、そのカスタムフィールドの値が、じつは予約投稿した時にだけ限定で消えるエラーが起きていたことに気がつきました。

原因を追究したところ、単純にロジックミスでした。もしプラグインに頼らず、カスタム投稿でカスタムフィールドを自作した時に、予約投稿でうまくいかないって方がいましたら参考にしてみてください。

wordpressで予約投稿した時にカスタムフィールドの値が消えてしまうエラーが起きた時の対処法

原因はアクションフック「add_action」の「save_post」のソース部分でした

通常公開ではうまく機能しているということで、疑ったのは記録・保存の部分「save_post」でした。

使っていたソースは、http://www.paka3.net/wpplugin28/のサイト様で公開されていたものを利用させて頂いて、下記のようなソースを使っていました。

add_action('save_post', 'customfield_value_save');

function customfield_value_save($post_id){
  $value_data = isset($_POST['value_data']) ? $_POST['value_data']: null;
  $value_data_ex = get_post_meta($post_id, 'value_data', true);

  if($value_data){
    update_post_meta($post_id, 'value_data',$value_data);
  }else{
    delete_post_meta($post_id, 'value_data',$value_data_ex);
  }
}

こちらは、ページが保存される際、「入力された値」と、「保存してある値」を取得し、「入力された値」があれば、update_post_metaで更新処理を行い、「入力された値」がなければ、delete_post_metaで削除処理を行うというものです。

しかし、どうも予約投稿をすると、「入力された値」が存在しても、削除処理が実施されてしまうようです。

そういうわけで、ものすごく乱暴に解決しようとすると、下記の具合です。

add_action('save_post', 'customfield_value_save');

function customfield_value_save($post_id){
  if($_POST['post_type'] == 'post'){
    update_post_meta($post->ID, 'value_data', $_POST['value_data']);
  }
}

要するに、削除処理のソースを入れないだけです。単純なカスタムフィールドであれば、ただupdate_post_metaを更新するだけでOKだと思います。

あとはnonce処理、自動保存ルーチンの時は処理しない、ユーザー権限の処理などを加えて、下記のソースにすると良さそうです。

add_action('save_post', 'customfield_value_save');
function customfield_value_save($post_id){
  global $post;
  $my_nonce = isset($_POST['my_nonce']) ? $_POST['my_nonce'] : null;
  if(!wp_verify_nonce($my_nonce, wp_create_nonce(__FILE__))) {
    return $post_id;
  }
  if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return $post_id; }
  if(!current_user_can('edit_post', $post->ID)) { return $post_id; }
  if($_POST['post_type'] == 'post'){
    update_post_meta($post->ID, 'value_data', $_POST['value_data']);
  }
}

改良ソースには下記サイト様の内容を引用させて頂きました。
カスタムフィールドを使って meta 要素を出力する
[ WordPress ] 独自のカスタムフィールドを設定する

同じトラブルに遭った人もいたようですが、こちらの方は自己完結していました。記述してあるように、やはりロジックに問題があるとダメなようですね。
[解決済み] 予約投稿時にカスタムフィールドの値がクリアされてしまう。

まとめ

wordpressで予約投稿した時にカスタムフィールドの値が消えてしまうエラーが起きた時は、もし通常公開で問題がないなら、まずはロジックを疑ってみましょう。

キヨタツ
キヨタツの一言

消えるカスタムフィールド・・・。

今読んだ記事をシェアする

wordpress

wordpressで予約投稿した時にカスタムフィールドの値が消えてしまうエラーが起きた時の対処法

  • このエントリーをはてなブックマークに追加
  • Pocket

このブログサイトが参考になった人は、いいねボタン! 更新情報も受け取れます!

arrow
デル株式会社
  • Pocket
  • このエントリーをはてなブックマークに追加

キヨタツ

キヨタツ

WEBを中心に、色々な制作をする個人事業主です。過去、エンジニア&webディレクターで会社勤めをしていました。主に要件定義や構築が得意で、HTML/css/javascript/PHP/git/wordpress/MT/DB/photoshop/illustrator/fireworksなど扱えます。現在、サーバー・アプリなどを習得中です。性格は、自虐好きです。