web-dev-qa-db-ja.com

Wp_insert_post()の前/途中にカスタムフィールド(ポストメタ)を追加する

私たちのコードベースには、投稿が挿入/作成されたときに実行される大量のロジックがあります。ただし、そのロジックの一部はカスタム投稿メタに依存しています。新しい投稿に投稿メタを追加するために私が知っている唯一の方法はそのようなものです:

$post_id = wp_insert_post($post_obj);
add_post_meta($post_id, 'key', "value");

ただし、これは、投稿の挿入時にフックが発生したときに投稿メタが存在しないことを意味します。

$post_objの一部として投稿メタを設定または含める方法はありますか?

私は$post_obj->custom_key = 'value'を使ってpostオブジェクトの新しいプロパティを作り上げようとしましたが、実際にはデータベースに収まるようには見えませんでした。私が考えることができる唯一のことは、menu_orderのように、私が使っていないpostオブジェクトの既存のプロパティをハイジャックし、そこに情報を保存することです。それは醜いハックです。

1
tobek

関数を wp_insert_post actionフックにフックすることができます。

add_action( 'wp_insert_post', 'wpse128767_add_meta' );
function wpse128767_add_meta( $post_id ) {
    add_post_meta( $post_id, 'key', 'value' );
}

他の挿入フックが実行される前にメタデータが追加されていることを確認するには、それに高い優先順位を付けます。

add_action( 'wp_insert_post', 'wpse128767_add_meta', 1 );

デフォルトでは、add_action()10の優先順位を使います。数値が小さいほど、早く実行されます。

2
Pat J