web-dev-qa-db-ja.com

Save_postフックを使用したアクションでカスタム投稿タイプのpostmetaを保存または更新できません

私は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番目の引数で文字列が次のように値を更新するために参照する必要があるキーです。意図されました。

2

update_post_meta(get_the_ID(), $address, 'test');update_post_meta(get_the_ID(), 'address', 'test');に変更してみてください

2
Abdul Awal

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 );
3
Nathan Johnson

このようなことを試してみませんか。

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);
0
K. Felix