WordPress несколько циклов

#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(), которая перематывает записи цикла, чтобы вы могли повторно использовать один и тот же запрос в разных местах на одной странице

https://codex.wordpress.org/Function_Reference/rewind_posts