Используя один WP_Query возражают в цикле другого объекта WP_Query

Я создаю два различных объекта WP_Query, один для каждого из двух различных типов сообщения, которые я использую. В создании моего вывода я хотел бы циклично выполниться через один из объектов, и в то же время цикл через другой объект также, таким образом, я могу произвести части их вместе. Вот пример того, что я хотел бы выполнить:

$rotator_args = array(
    'post_type' => 'rotator',
    );

$rotator = new WP_Query($rotator_args);

$numrotators = $rotator->post_count; 

$testimonial_args = array(
    'post_type' => 'testimonial',
    'posts_per_page' => $numrotators,
    );

$testimonial = new WP_Query($testimonial_args);

while ( $rotator->have_posts() ) : 
    $rotator->the_post(); //setup the rotator posts
    $testimonial->the_post(); //this breaks things, understandably
    $rotator_image = get_the_post_thumbnail($rotator->ID, 'large');
    $testimonial_image = get_the_post_thumbnail($testimonial->ID, 'large');
    $return .= '<div>' . $rotator_image . '</div>';
    $return .= '<div>' . $testimonial_image . '</div>';
endwhile;
return $return;

Однако это не работает. Вынимание $testimonial->the_post(); (и связанное $testimonial связанный код), чинит вещи.

1
07.02.2012, 22:10
4 ответа

Пройдите каждый цикл, храня объект сообщения в массиве. Затем в конце комбинируют их. (Это полностью не тестируется),

https://gist.github.com/1762204

3
19.02.2020, 22:49
  • 1
    имеет правильный конец палки на этом, мне кажется. Хотя это действительно кажется немного неоптимизированным. –  ZaMoose 07.02.2012, 23:44
  • 2
    На первый взгляд это выглядит прекрасным. @ZaMoose, там что-нибудь в особенности, которое кажется неоптимизированным? (выяснение, таким образом, я могу работать над ускорением его если необходимый/возможный). –  Travis Northcutt 07.02.2012, 23:50
  • 3
    Это не допускает использование никаких функций, которые не берут идентификатор сообщения (или другое свойство WP_Query) как аргумент, не так ли? В противном случае любые предложения на способе реализовать что-то, что действительно допускает использование, например. get_the_content()? –  Travis Northcutt 07.02.2012, 23:54
  • 4
    Вы по существу анализируете через два массива объектов и затем переделываете то же самое снова - Вы копируете свое усилие избежать избиений $post-related. Мне, вероятно, придется уделить это некоторое внимание. Аплодисменты вздоха –  ZaMoose 07.02.2012, 23:55
  • 5
    Прямо, прежде чем цикл помещается print_r( $rotator_items[0] ); для наблюдения всех данных, Вы имеете. Например, для довольного использование $rotator_items[0]->post_content –  Bill Erickson 08.02.2012, 00:24

Я не уверен, что можно объединить эти два цикла вместе, так как нет ничего для разделения их от точки зрения данных. Вы пытаетесь добавить данные из свидетельства во вращающее устройство, когда это идет?

0
19.02.2020, 22:49
  • 1
    Да, пытаясь получить данные из свидетельства в области вращающего устройства (на самом деле использующий <литий> s вместо <отделения> s, но я изменил это для упрощения вещей здесь). –  Travis Northcutt 07.02.2012, 23:35

Править: Счет осуществляет рефакторинг, намного лучше, чем мое Редактирование клейкой ленты: Кроме того, мое редактирование будет придерживаться того же свидетельства, которое не было даже желаемым результатом. Снова: см., что счет осуществляет рефакторинг

Затруднения, которые Вы испытываете, с $post. Каждый раз Вы запускаете the_post (), $post имеет применимые данные. Я предложил бы что-то как следующее:

global $post;

$rotator_args = array(
    'post_type' => 'rotator',
    );

$rotator = new WP_Query($rotator_args);

$numrotators = $rotator->post_count; 

$testimonial_args = array(
    'post_type' => 'testimonial',
    'posts_per_page' => $numrotators,
    );

$testimonial = new WP_Query($testimonial_args);
if( $testimonial->have_posts() )
{
    $testimonial->the_post();
    $my_testimonial = $post;
}

while ( $rotator->have_posts() ) : 
    $rotator->the_post(); //setup the rotator posts
    $rotator_image = get_the_post_thumbnail($rotator->ID, 'large');
    $testimonial_image = get_the_post_thumbnail($my_testimonial->ID, 'large');
    $return .= '<div>' . $rotator_image . '</div>';
    $return .= '<div>' . $testimonial_image . '</div>';
endwhile;
return $return;
0
19.02.2020, 22:49
  • 1
    Это не будет работать. Это будет постоянно возвращать единственное свидетельство. –  ZaMoose 07.02.2012, 23:41
  • 2
    Вы совершенно правы, я не понял, что он пытался захватить нового в каждом повторении. счет –  Jonathan Christopher 07.02.2012, 23:43

Есть ли некоторая часть данных, которые подключают $rotator к $testimonial? Если не затем я не вижу то, что точка является …, у Вас просто есть два разрозненных цикла.

0
19.02.2020, 22:49
  • 1
    Право, но я хочу, чтобы они работали вместе, по существу, так, чтобы я мог произвести информацию от них связанным способом, Любое сообщение в типе сообщения вращающего устройства, однако, не подключено ни к какому сообщению в типе сообщения свидетельства. –  Travis Northcutt 08.02.2012, 00:49

Теги

Похожие вопросы