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

最後に一言

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

本記事を気に入って頂けたら、facebookの「いいね!」を是非!

wordpress

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


本記事のシェアはこちらから!

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

PROFILE

yoshi

follow us in feedly

本ブログ・WebMakeBlog KIYOTATSUを運営しているYoshiと申します。普段はWEB制作をやっています。主に要件定義や構築が得意で、HTML/css/javascript/PHP/git/wordpress/MT/DB/photoshop/illustrator/fireworksなど扱えます。サーバー・アプリなども習得中。