ここでの私の質問は、将来予定されている投稿のすべての単一詳細ページを表示することです。 404ページを返しています。これはワードプレスでどのように行うことができますか?
私がこれまでに使ったことは
$args = array(
'posts_per_page' => 10,
'category__in' => $category->term_id,
'orderby' => 'post_date',
'meta_key' => 'starttime',
'order' => 'ASC',
'post_type' => 'post',
'post_status' => array('publish','future'),
);
$loop1 = new WP_Query( $args );
このコードから私は公開され、予定されている投稿を取得します。公開された記事のパーマリンクはうまく機能しています。しかし、それはスケジュールされた投稿のために働いておらず、404ページエラーにリダイレクトしていません。
いくつかの調査の後、これは私のために働きました:
add_filter('the_posts', 'show_future_posts');
function show_future_posts($posts)
{
global $wp_query, $wpdb;
if(is_single() && $wp_query->post_count == 0)
{
$posts = $wpdb->get_results($wp_query->request);
}
return $posts;
}
うまくいけば、それは同じ問題を抱えている他の人たちのために働くでしょう。
もっときれいな解決策はpre_get_posts
で投稿ステータスを設定することです。デフォルトでは、メインクエリは、ログアウトしたユーザーに公開された投稿と、ログインしたユーザーに公開された投稿とプライベート投稿のみを表示します。
pre_get_posts
を使用して、メインクエリに今後の投稿を追加できます。
add_action( 'pre_get_posts', function ( $q )
{
if ( !is_admin()
&& $q->is_main_query()
&& $q->is_single()
) {
$q->set( 'post_status', ['publish', 'future'] );
}
});
スケジュールされた投稿のリストを表示するためにもこのコードを試してください:
<?php $my_query = new WP_Query('post_status=future&order=DESC&showposts=5');
if ($my_query->have_posts()) {
while ($my_query->have_posts()) : $my_query->the_post(); $do_not_duplicate = $post->ID; ?>
<li><?php the_title(); ?></li>
<?php endwhile; } ?>