web-dev-qa-db-ja.com

投稿を保存するときにupdate_post_metaとupdate_fieldのみが機能する

カスタムフィールドにデータを格納するには、Advanced Custom Fields(ACF)を使用します。私は緯度と経度の情報を別々に保存していましたが、それらを1つのカスタムフィールドに含める必要があるので、以下の関数を作りました。 $queryは関連するすべての投稿を照会するだけです。

<?php 
$query = query_custom_posts(); if($query->have_posts()): 
while ($query->have_posts()): $query->the_post();
if(get_field('map_lat') && get_field('map_lng')):

$lat = get_field('map_lat');
$long = get_field('map_lng');
$coord = $lat.','.$long;
$post_id = get_the_ID();

update_post_meta($post_id, 'map_coor', $coord);


endif; endwhile; wp_reset_query(); endif;

?>

今すぐ上記の機能が動作します。フィールドmap_coorには緯度と経度が入力され、カンマで区切られます(フィールド内の情報を確認できます)。

奇妙なことに、フロントエンドでget_field('map_coor')を使用しても何も表示されません。対応する投稿を保存すると、情報が表示されます。

上記の関数でも、私は次のように(ACFからの)関数update_fieldを使用しようとしました:update_field($post_id, 'map_coor', $coord)しかし問題はまだそこにあります。

だから私の質問です。上記の機能を変更する必要がありますか、それとも単にすべての投稿を保存する機能を実行する必要がありますか?後者の場合それ、どうやったら出来るの?私はフックsave_postsを見つけましたが、どのようにしてそれをすべての投稿に渡せるようにするのかわかりません。

4
eskimo

問題は、関数 ACFからのupdate_fieldupdate_post_meta とは少し違う動作をすることです。見えますか?

update_post_meta( $post_id, $meta_key, $meta_value, $prev_value );
update_field( $field_key, $value, $post_id );

update_post_meta を使用した場合、私の考えでは get_post_meta を使用してメタを取得する必要があります。 update_field を使用する場合は、ACFではキーと値のペアが若干異なる方法で格納されるため、 the_field または get_field を使用する必要があります。

10
realloc