私はsave-post
アクションにフックすることによってカスタムフィールドを更新しようとしています、しかし私が理解することができない理由で、それは働いていません。
次の関数はテーマのfunctions.php
に配置されています。
function save_address_meta() {
$meta = get_post_meta( get_the_ID() );
$address = $meta['address'];
update_post_meta(get_the_ID(), $address, 'test');
}
add_action( 'save_post', 'save_address_meta', 50 );
pre_post_update
もカスタムフィールド以外のものがポストで更新されない限り実際には起動しないことを私は理解しているので、私はsave_post
を使っても試しました - しかし、これもうまくいきません。
私はstackexchangeや他のさまざまな情報源でオンラインで解決策を探すのに数時間を費やしましたが、それでもうまくいきません。これは、元のコードを控えめにしたものですが、この基本的な状態でも機能していないようです。
基本的に、問題のカスタムフィールドを取得し、それを文字列値で更新しようとしています。
print_r
を$meta
配列にすると、カスタムフィールド値は次のように配列に表示されます。
[address] => Array ( [0] => 50 Call Lane Leeds LS1 6DT United Kingdom )
私はまた$address = $meta['address'][0]
を使用して上記の関数でこのカスタムフィールドにアクセスしようとしました。
この方法でキーの値をエコーアウトできますが、間違えない限り、3番目の引数で文字列が次のように値を更新するために参照する必要があるキーです。意図されました。
update_post_meta(get_the_ID(), $address, 'test');
をupdate_post_meta(get_the_ID(), 'address', 'test');
に変更してみてください
save_post
フックは、WordPressがデータベースに投稿を保存するたびに起動します。これには、実際の投稿とは異なる投稿IDを持つWPリビジョンの保存が含まれます。実際の投稿ではなくリビジョンに投稿メタを取得して保存している可能性があります。
また、save_post
フックは、起動時にpost IDを含むいくつかの変数を渡すので、get_the_ID()
関数を使う必要はありません。
function wpse_261414_save_post( $post_id, $post, $update ) {
//* Make sure this isn't a post revision
if( wp_is_post_revision( $post_id ) ) {
return;
}
$meta = get_post_meta( $post_id );
$address = $meta[ 'address' ];
update_post_meta( $post_id, $address, 'test' );
}
add_action( 'save_post', 'wpse_261414_save_post', 10, 3 );
このようなことを試してみませんか。
function save_address_meta() {
global $post;
if($post->post_type == 'your-custom-post-type'){
$address_field = 'test'; //Get your address field here
update_post_meta($post->ID, 'address', 'test');
}
}
add_action( 'save_post', 'save_address_meta' );
そして、あなたは自分のフィールドの値を他の場所で得ることができます。
$address = get_post_meta($post->ID, 'address', true);