特定の投稿タイプで未来の日付で投稿ができるようにする

WordPressには予約投稿機能がついている。未来の日付で投稿するとすぐには投稿されず、その日付が来たときに自動で投稿される。便利な機能であるが、この機能を無視して、未来の日付で、すぐに投稿したいとき、特定の投稿タイプで未来の日付で投稿ができるようにする方法。


wp_insert_post_data をフックとして使う。
function.phpに下記の文章を追記する。

[php]
function disable_reservation_post($data, $postarray) {
if ($data[‘post_status’] == ‘future’ && $postarray[‘post_status’] == ‘publish’) {
$data[‘post_status’] = ‘publish’;
}
return $data;
}
add_filter(‘wp_insert_post_data’, ‘disable_reservation_post’, 10, 2);
[/php]

これで、すべての投稿記事の予約投稿機能がオフになり、未来の日付での投稿が可能となる。


特定の投稿タイプ(カスタム投稿タイプ)だけ、予約投稿機能をオフにするには、

[php]
function disable_reservation_post( $data, $postarray ) {
if ( ( $data[‘post_type’] == ‘カスタム投稿タイプ’ && $data[‘post_status’] == ‘future’) && $postarray[‘post_status’] == ‘publish’ ) {
$data[‘post_status’] = ‘publish’;
}
return $data;
};
add_filter( ‘wp_insert_post_data’, ‘disable_reservation_post’, 10, 2 );
[/php]

「カスタム投稿タイプ」のところに、オフにしたい投稿タイプ名を挿入。postなら投稿記事が、pageならば固定ページが、カスタム投稿タイプ名ならばその投稿タイプが、予約投稿機能がオフになり未来の日付での投稿が可能となる。


複数のカスタム投稿タイプをオフにしたい場合は、以下のような感じでいいのかな。

[php]
function disable_reservation_post( $data, $postarray ) {
if ( ( $data[‘post_type’] == ‘カスタム投稿タイプ1’ && $data[‘post_status’] == ‘future’) && $postarray[‘post_status’] == ‘publish’ ) {
$data[‘post_status’] = ‘publish’;
}
elseif ( ( $data[‘post_type’] == ‘カスタム投稿タイプ2’ && $data[‘post_status’] == ‘future’) && $postarray[‘post_status’] == ‘publish’ ) {
$data[‘post_status’] = ‘publish’;
}
return $data;
};
add_filter( ‘wp_insert_post_data’, ‘disable_reservation_post’, 10, 2 );
[/php]

記事の共有: