mildfuzz
  • 0
Мастер

Есть ли способ определить переменную $post вне цикла?

  • 0

Я пытаюсь ускорить сайт 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 мой код цикла, а у меня просто такой же пост, хоть и с разными датами

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

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

    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() ) )
            );
    }
    
    • 0

Оставить ответ

You must login to add an answer.