#wordpress #loops
#wordpress #циклы
Вопрос:
Я ужасно расстраиваюсь, пытаясь создать несколько циклов в WordPress. Я просмотрел множество статей — что я делаю не так. Я поместил следующее в loop.php файл (потому что я построил домашнюю страницу на этом)…
<!--Loop 1-->
<?php global $query_string; // required
$posts = query_posts($query_string.'category_name=newsamp;posts_per_page=3');?>
<?php while ( have_posts() ) : the_post(); ?>
<!--Loop 2-->
<?php wp_reset_query(); // reset the query ?>
<?php global $query_string2; // required
$posts = query_posts($query_string2.'category_name=jobsamp;posts_per_page=3');?>
<?php while ( have_posts() ) : the_post(); ?>
Комментарии:
1. Кстати, если я уберу цикл 2, он работает, похоже, ему не нравятся 2 цикла на странице, хотя я использовал reset_query
2. попробуйте новый момент WP_Query из query_posts
Ответ №1:
<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
// your output html
<?php endwhile; ?>
Вы вложили циклы (отсутствует endwhile).
Ответ №2:
Вы не можете просто придумать переменную «query_string2» и ожидать, что она будет работать
Попробуйте это:
<!--Loop 1-->
<?php
global $query_string; // required
$posts = query_posts($query_string.'category_name=newsamp;posts_per_page=3');?>
<?php while ( have_posts() ) : the_post(); ?>
<!--Loop 2-->
<?php wp_reset_query(); // reset the query ?>
<?php
$posts = query_posts($query_string.'category_name=jobsamp;posts_per_page=3');?>
<?php while ( have_posts() ) : the_post(); ?>
Если это не сработает (я не помню wp_reset_query()
, сбрасывает ли $query_string
глобальный уровень с головы), попробуйте следующее:
<?php
global $query_string; // required
$query_string_backup = $query_string;
$posts = query_posts($query_string.'category_name=newsamp;posts_per_page=3');?>
<?php while ( have_posts() ) : the_post(); ?>
<!--Loop 2-->
<?php wp_reset_query(); // reset the query ?>
<?php
$posts = query_posts($query_string_backup.'category_name=jobsamp;posts_per_page=3');?>
<?php while ( have_posts() ) : the_post(); ?>
Комментарии:
1. Спасибо за ваши предложения, но, к сожалению, ни одно из них не работает:-(
2. Я полагаю, вы тоже изучили
endwhile
проблему, не так ли?3. Завершение после каждого из них, как это pastebin.com/riKHR7Xh ? Я пробовал это, но все равно не повезло — он просто пустой.
Ответ №3:
Это будет работать:
<?php
global $query_string; //make sure these are in the correct format for post queries
global $query_string1;
// First loop
$first_loop = new WP_Query( $query_string.'category_name=newsamp;posts_per_page=3');
while ( $first_loop->have_posts() ) : $first_loop->the_post() :
// do your thing
// e.g: $first_loop->the_content();
endwhile;
// second loop
$second_loop = new WP_Query( $query_string1.'category_name=newsamp;posts_per_page=3');
while ( $second_loop->have_posts() ) : $second_loop->the_post() :
//do your thing
endwhile;
// Reset Post Data
wp_reset_postdata();
?>
Комментарии:
1. Только что попробовал это pastebin.com/Asnz9gLx — извините, но это не сработало, все еще пустая страница.
2. Что именно находится внутри ваших переменных $query_string? Приведенный выше код будет работать без этих переменных внутри аргумента WP_Query.
Ответ №4:
Я мог бы помочь, но я думаю, что сначала я должен понять 1 фундаментальный вопрос: ЧТО именно вы пытаетесь сделать? Какова ваша цель? Как вы думаете, зачем вам нужны вложенные циклы?
Это поможет мне более корректно реагировать.
Комментарии:
1. Большое спасибо за ваше предложение, теперь мне удалось решить эту проблему с помощью друга. Сейчас опубликую ответ.
Ответ №5:
Я решил это с помощью следующего кода, который я поместил в шаблон страницы (мой друг посоветовал, что лучше оставить loop.php один)
<?php $custom_query = new WP_Query('category_name=news'); // only News category
while($custom_query->have_posts()) : $custom_query->the_post(); ?>
<h2><?php the_title(); ?></h2>
<?php the_content();?>
<?php endwhile; ?>
<?php wp_reset_postdata(); // reset the query ?>
<?php $custom_query = new WP_Query('category_name=jobs'); // only Jobs category
while($custom_query->have_posts()) : $custom_query->the_post(); ?>
<h2><?php the_title(); ?></h2>
<?php the_content();?>
<?php endwhile; ?>
Ответ №6:
Существует функция rewind_posts(), которая перематывает записи цикла, чтобы вы могли повторно использовать один и тот же запрос в разных местах на одной странице