Advanced Custom Fields でカスタムフィールドの値が更新できない

前置き

大量のデータを一括で入れたいとき、Really Simple CSV Importer が便利なのですが、
さらに、画像も一括で取り込みたいときは、Really Simple CSV Importer Media Plus を使うと幸せになれるわけです。

ついでに、カスタムフィールドも Advanced Custom Fields を使っていて、あらかじめ、サーバー上にまとめて画像を上げておいて、それを一括で取り込むようにエクセルなんかでCSVファイルを用意して、一気呵成に取り込んだわけですが、ここから本題。

本題

Advanced Custom Fields で用意しておいた、画像のフィールド、たとえば photo2 としましょう。
そこに一括で画像を登録するところまではうまくいったのですが、どういうわけか、WordPressの管理画面から、なんどやっても内容を更新できなくなっていることに気が付きました。

管理画面では、カスタムフィールドの画像はきれいに入れ替わっているはずなのに、フロント側では表示されなかったり、古いままの画像が表示されたり。

これはいったいなんだ。と延々と悩んだ末、とんでもない結末が。。。

結論

1612270001

もう、なんだか大変申し訳無い気持ちでいっぱいなのですが、カスタムフィールド名の前に、半角の空白が、ひっそりと入っていました。

この空白をクリアすればそれだけで問題は解決。

ぐはぁ。

なぜ、これに気がついたかというと、カスタムフィールドの値が格納されている、wp_postmetaテーブから、投稿(カスタム投稿)に関連するデータをぜんぶ引っ張り出してみる。こんなかんじで。

 

<?php
	if (is_user_logged_in()){
	    global $wpdb;
	    $sql = "SELECT * FROM $wpdb->postmeta WHERE post_id=" . $post->ID;
	    $results = $wpdb->get_results( $sql, OBJECT );
	    print_r($results);
	}
?>

これをsingle.php なりに貼り付けてみてみると、

[meta_key] => photo2 というのと、

[meta_key] => _ photo2 というのがあって、この空白入りのやつが怪しいと。

アンスコが先についているのが、Advanced Custom Fields 固有のデータで、それとアンスコなしの本来のカスタムフィールドのデータが連動していると。

ところが、アンスコを消すと、先頭に空白がつくので、それがなくなってしまって、整合性がとれなくなるということでした。

_ photo2から、photo2は取り出せるけれど、その逆はできない(photo2→_photo2)という感じでしょうか。

だから、管理画面では違う画像に入れ替えたらちゃんと変わるのに、フロント側では表示されないというわけですね。

なお、Advanced Custom Fields のフィールド名を後から変更すると、変更前に保存された古いフィールド名のデータはそのまま残骸として残ってしまうようです。

実際には動作上はあまり問題はなってませんが、きになるなら

$sql = "DELETE FROM wp_postmeta WHERE meta_key='_ photo2'";
$results = $wpdb->query( $sql );

という感じで一括削除出来ると思います。自己責任で。

そもそも、Advanced Custom Fields のフィールド名を入力する段階で気をつけておかないといけないことですね。

 

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