Есть ли способ определить $ post var за пределами цикла?

wordpress.stackexchange https://wordpress.stackexchange.com/questions/2363

  •  16-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь ускорить сайт WordPress, конденсируя три wp_queries в один. Мне нужно разделить категории, поэтому я делаю звонок и определяю 3 массива для удержания поста, используя переключатель, как так:

 $new_query = new WP_Query();
                $new_query->query('post_type=post&paged='.$paged);
                if ( $new_query->have_posts() ) : while ( $new_query->have_posts() ) : $new_query->the_post();              
                $category = choose_one_category(get_the_category());

                switch ($category){
                    case "Category 1":
                        $cat1[] = $post;
                        break;
                    case "Category 2":
                        $cat2[] = $post;
                        break;
                    case "Category 3":
                        $cat3[] = $post;
                        break;
                }


                endwhile; endif;

Что оставляет у меня 3 массива, которые с хорошими сортировками. Теперь я хочу определить переменную $ post за пределами цикла, чтобы я мог использовать такие методы, как the_date() & comments_number() Без необходимости переписать эти функции, может ли кто -нибудь помочь?

Я пытался:

                    foreach ($centre as $new_post){
                        $post = $new_post;

                                             include('front_page_loop.php');
                    } 

Где front_page_loop.php мой код цикла, но я просто получаю тот же пост, хотя и с разными датами

Это было полезно?

Решение

Я думаю setup_postdata($post) (внутренняя) функция делает это. Я не смог найти надлежащую документацию для этого в Codex (типичный), но есть примеры с ним здесь и там, как в Отображение сообщений с использованием пользовательского запроса выбора.

Этот тестовый фрагмент, кажется, работает нормально, например, код, который у вас есть:

foreach ( $cat1 as $post ) {

    setup_postdata($post);
    printf( 'Post "%s" was posted %s ago<br />',
        get_the_title(),
        human_time_diff( strtotime( get_the_date() ) )
        );
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top