Я надеялся, что один из вас, гуру WordPress, может помочь мне здесь.
Я пытаюсь создать цикл внутри цикла, который представляет 12 сообщений в 6 строк. В каждом ряду у вас есть 2 деления. Каждый div предназначен для отображения заголовка сообщения. И цикл проходит через все 12 сообщений и группирует их правильно — 6 делений, с 2 сообщениями. Каждый пост имеет свой уникальный заголовок.
Мне удалось получить цикл для разбивки 12 постов на 6 делений, в каждом из которых есть два внутренних деления. Но я не могу заставить внутренние div проходить через все посты. Вместо этого они просто перебирают первые два.
Итак, в итоге я получаю 6 строк, в каждом из которых по два деления. Но только первые два сообщения продолжают повторяться во всех рядах. Что я здесь не так делаю?
<!--TESTER -->
<!--TESTER -->
<!--TESTER -->
<div class="section section-testimonials">
<?php
$args=array(
'post_type' => 'testimonial'
);
$query = null;
$query = new WP_Query($args);
if( $query -> have_posts() ) {
echo '';
$i = 0;
while ($query -> have_posts()) : $query->the_post();
if($i % 2 == 0) { ?>
<div class="row">
<?php $loop = new WP_Query( array( 'post_type' => 'testimonial', 'posts_per_page' => 2 ) ); ?>
<?php while ( $loop -> have_posts() ) : $loop -> the_post(); ?>
<!-- Two posts appear here -->
<div class="col-md-6">
<h1><?php the_title(); ?></h1>
</div>
<?php endwhile; ?>
</div>
<?php } ?>
<?php
$i++;
endwhile;
}
wp_reset_query();
?>
</div>
<!--TESTER -->
<!--TESTER -->
<!--TESTER -->
Любая помощь будет очень ценна!
Ура,
Sanny
Здесь я разбил проблему на части, чтобы вы могли видеть циклы, работающие сами по себе.
<?php
$slides = [0,1,2,3,4,5];
foreach($slides as $slide):
?>
<!-- I need to get 6 of these divs which contain 2 cards inside them -->
<div class="item active">
<p>Example Carousel Slide <?php echo $slide;?></p>
</div>
<?php endforeach?>
Тогда вместо того, чтобы просто повторить константу <p>
тэг, вместо этого вы помещаете туда петлю.
<?php
$posts = ["post1", "post2"];
foreach($posts as $post):?>
<div class="col-md-6">
<?php echo $post;?>
</div>
<?php endforeach?>
Я прыгну вперед на несколько шагов, но в итоге ты получишь нечто подобное.
<?php
$posts = [
0=>"post0",
1=>"post1",
2=>"post2",
3=>"post3",
4=>"post4",
5=>"post5",
6=>"post6",
7=>"post7",
8=>"post8",
9=>"post9",
10=>"post10",
11=>"post11"];
for($slideNumber=0; $slideNumber < 6; $slideNumber++):
?>
<!-- I need to get 6 of these divs which contain 2 cards inside them -->
<div class="item active">
<?php
echo("<p>This is slide number " . $slideNumber . "</p>");
for($i=0; $i<2; $i++):?>
<div class="col-md-6">
<?php
$actualPostNumber= ($slideNumber * 2) + $i ;
echo("<p>" . $posts[$actualPostNumber] . "</p>");
?>
</div>
<?php endfor; ?>
</div>
<?php endfor; ?>
Прочитайте этот код и постарайтесь придумать, что он будет производить. В итоге у вас должно получиться 6 слайдов, каждый из которых содержит два поста.
Код, который я разместил, является скелетом относительно вашего возможного решения. Однако, надеюсь, что этот подход «счетчики» поможет вам назначить правильное количество постов для каждого слайда карусели.
Спасибо, ребята, за помощь. Мне удалось это решить !!! Вот решение:
Если у кого-нибудь есть мысли по поводу того, чтобы сделать это лучшим решением, позвольте мне знать! ура
<?php
$args=array(
'post_type' => 'testimonial',
);
$query = new WP_Query($args);
if( $query -> have_posts() ) {
echo '';
$i = 0;
$ids = array();
while ($query -> have_posts()) : $query->the_post();
if($i % 2 == 0) { ?>
<div class="item <?php if($i == 0) :?>active<?php endif; ?>">
<div class="row">
<?php $loop = new WP_Query( array( 'post_type' => 'testimonial', 'posts_per_page' => 2, 'orderby' => 'rand', 'post__not_in' => $ids ) ); ?>
<?php while ( $loop -> have_posts() ) : $loop -> the_post(); ?>
<!-- A single testimonial -->
<div class="col-md-6">
<div class="card card-plain">
<div class="content">
<h4 class="title"><?php the_content(); ?></h4>
<div class="footer">
<div class="author">
<span><?php the_title(); ?></span>
</div>
</div>
</div>
</div>
</div>
<?php $ids[] = get_the_ID(); ?>
<?php endwhile; ?>
</div>
</div>
<?php } ?>
<?php
$i++;
endwhile;
}
wp_reset_query();
?>