公開ステータスに変わった時にカスタムフィールドの値を空に変更したいと考えており、次のコードを実行しましたが、うまくいきません。
function post_published( $new_status, $old_status, $post ) {
if ( $new_status == 'publish' && $old_status != 'publish' && $post->post_type == 'post' ) {
add_action( 'wp_insert_post', 'update_post_metafield', 10, 2);
}
}
add_action( 'transition_post_status', 'post_published', 10, 3 );
function update_post_metafield($post_ID, $post){
update_post_meta( $post_ID, 'metafield', '' );
}
/* 下のアクションフックで上の関数を直接呼び出した場合は、期待した通りに機能する */
// add_action( 'wp_insert_post', 'update_post_metafield', 10, 2);
実はクイック編集だと期待した通りに動作するのですが、通常の編集画面では、公開直後に画面上のフィールド値が変わらないだけではなく(それは仕方がないかと)、いったん記事一覧に戻ってから編集画面に戻っても変わりません。
コード中のコメントにも書きましたが、直接、update_post_meta を実行する関数をアクションフックから呼び出せば、正常に機能します。
期待した動作を実装するには、どのようにしたらよいでしょうか。アドバイスをいただければ助かります。
-
このトピックは
unclが3年、 8ヶ月前に変更しました。