web-dev-qa-db-ja.com

デフォルトのステータスをカスタム投稿タイプに設定する方法

カスタムのpost_type「product」を保存するときに、それらのステータスを自分のカスタムステータス「incomplete」に設定します。

2

wp_insert_post_dataフィルタをフックして、投稿ステータスを公開済みに設定する前に未完了として設定するよう強制します。次のコードでは、未完了として設定された投稿のみを保存できます。

add_filter( 'wp_insert_post_data', 'prevent_post_change', 20, 2 );

function prevent_post_change( $data, $postarr ) {
    if ( ! isset($postarr['ID']) || ! $postarr['ID'] ) return $data;
    if ( $postarr['post_type'] !== 'product' ) return $data; // only for products
    $old = get_post($postarr['ID']); // the post before update
    if (
        $old->post_status !== 'incomplete' &&
        $old->post_status !== 'trash' && // without this post restoring from trash fail
        $data['post_status'] === 'publish' 
    ) {
        // set post to incomplete before being published
        $data['post_status'] = 'incomplete';
    }
    return $data;
}
5
gmazzap