web-dev-qa-db-ja.com

今後(予定)の投稿の詳細ページを表示する方法

ここでの私の質問は、将来予定されている投稿のすべての単一詳細ページを表示することです。 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ページエラーにリダイレクトしていません。

1
TBI Infotech

いくつかの調査の後、これは私のために働きました:

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;
}

うまくいけば、それは同じ問題を抱えている他の人たちのために働くでしょう。

1
TBI Infotech

もっときれいな解決策は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'] );
    }
});
2
Pieter Goosen

スケジュールされた投稿のリストを表示するためにもこのコードを試してください:

<?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; } ?>
0
Zohair Baloch