如何在轮播 PHP 中的每个项目的列中显示两个项目?

How to display two items in column per item in carousel PHP?

我有一个旋转木马,它必须在每个项目的每列中显示两个项目。我尝试使用 foreach 方法和 array_chunk() 来这样做,但它似乎没有起作用。 这是我正在使用的代码:

<div class="section cataloge">
<div class="section-wrapper">
    <div class="container">
        <div class="cataloge-page">
            <?php
            if ($cataloge->have_posts()) {
            ?>
                <div class="cataloge-slider owl-carousel owl-theme">
                    <?php
                    while ($cataloge->have_posts()) {
                        $cataloge->the_post();
                        $input_array = array($cataloge);
                        foreach (array_chunk($input_array, 2, true) as $column) {
                    ?>
                            <div class="cataloge-slider-item-wrapper">
                                <?php
                                foreach ($column as $input_array) {
                                   
                                ?>
                                    <article class="cataloge-item">
                                        <figure class="cataloge-item-img img-placeholder">
                                            <?php the_post_thumbnail(); ?>
                                            <?php
                                            if (!empty(get_field('sticky_text'))) {
                                            ?>
                                                <div class="cataloge-sticky"><?php the_field('sticky_text'); ?></div>
                                            <?php
                                            }
                                            ?>
                                        </figure>
                                        <div class="cataloge-item-data">
                                            <h4 class="cataloge-item-title"><?php the_title(); ?></h4>
                                            <div class="cataloge-item-category">
                                                <?php
                                                if (have_rows('cataloge_category')) {
                                                    while (have_rows('cataloge_category')) {
                                                        the_row();
                                                ?>
                                                        <?php
                                                        if (!empty(get_sub_field('cataloge_category_item'))) {
                                                        ?>
                                                            <span><?php the_sub_field('cataloge_category_item'); ?></span>
                                                        <?php
                                                        }
                                                        ?>
                                                <?php
                                                    }
                                                }
                                                ?>
                                            </div>
                                            <div class="cataloge-item-info"><?php the_content(); ?></div>
                                            <div class="cataloge-item-action">
                                                <?php
                                                if (!empty(get_field('cataloge_file'))) {
                                                ?>
                                                    <a href="<?php the_field('cataloge_file'); ?>">
                                                        <svg width='25' height='25'>
                                                            <use xlink:href='<?php echo get_template_directory_uri(); ?>/frontend/fontawesome/solid.svg#eye'></use>
                                                        </svg>
                                                    </a>
                                                <?php
                                                }
                                                ?>
                                                <?php
                                                if (!empty(get_field('cataloge_download_file'))) {
                                                ?>
                                                    <a href="<?php the_field('cataloge_download_file'); ?>" download="">
                                                        <svg width='25' height='25'>
                                                            <use xlink:href='<?php echo get_template_directory_uri(); ?>/frontend/fontawesome/solid.svg#download'></use>
                                                        </svg>
                                                    </a>
                                                <?php
                                                }
                                                ?>
                                            </div>
                                        </div>
                                    </article>
                                <?php
                                }
                                ?>
                            </div>
                    <?php
                        }
                    }
                    ?>
                </div>
            <?php
            }
            ?>
        </div>
    </div>
</div>

我错过了什么?除了 foreach or/and array_chunk 之外,还有其他方法可以得到结果吗?

您可以通过echoprint_r逐步调试。

我觉得这里有问题$input_array = array($cataloge); 更改为 $input_array = (array) $cataloge;

用这种方法运行 会遇到很多问题。为了解决主要问题,您在整个查询对象上使用 array_chunk,而不仅仅是帖子。这可能就是它没有按预期工作的原因。您可能想要 array_chunk($cataloge->posts) 将它们分块。

但是,您已将此循环放在所有帖子的循环中,这意味着该循环的每次迭代都会重复此操作。因此,如果您的 $cataloge 查询中有 10 个帖子,您将得到 50 张幻灯片,其中 45 张是重复的。如果我们改为在 while 循环之外使用带有 array_chunk 的 foreach 循环(记得使用 setup_postdata()),我们应该走在正确的轨道上:

<div class="section cataloge">
  <div class="section-wrapper">
    <div class="container">
      <div class="cataloge-page">
        <?php if ($cataloge->have_posts()) { ?>
          <div class="cataloge-slider owl-carousel owl-theme">
            <?php $input_array = array($cataloge->posts);
            foreach (array_chunk($input_array, 2, true) as $column) { ?>
              <div class="cataloge-slider-item-wrapper">
                <?php foreach ($column as $input_array) {
                  setup_postdata($column); ?>
                  <article class="cataloge-item">
                    <figure class="cataloge-item-img img-placeholder">
                      <?php the_post_thumbnail(); ?>
                      <?php if (!empty(get_field('sticky_text'))) { ?>
                        <div class="cataloge-sticky"><?php the_field('sticky_text'); ?></div>
                      <?php } ?>
                    </figure>
                    <div class="cataloge-item-data">
                      <h4 class="cataloge-item-title"><?php the_title(); ?></h4>
                      <div class="cataloge-item-category">
                        <?php if (have_rows('cataloge_category')) {
                          while (have_rows('cataloge_category')) {
                            the_row();
                            if (!empty(get_sub_field('cataloge_category_item'))) { ?>
                              <span><?php the_sub_field('cataloge_category_item'); ?></span>
                            <?php }
                          }
                        } ?> 
                      </div>
                      <div class="cataloge-item-info"><?php the_content(); ?></div>
                      <div class="cataloge-item-action">
                        <?php if (!empty(get_field('cataloge_file'))) { ?>
                          <a href="<?php the_field('cataloge_file'); ?>">
                            <svg width='25' height='25'>
                              <use xlink:href='<?php echo get_template_directory_uri(); ?>/frontend/fontawesome/solid.svg#eye'></use>
                            </svg>
                          </a> 
                        <?php }
                        if (!empty(get_field('cataloge_download_file'))) { ?>
                          <a href="<?php the_field('cataloge_download_file'); ?>" download="">
                            <svg width='25' height='25'>
                              <use xlink:href='<?php echo get_template_directory_uri(); ?>/frontend/fontawesome/solid.svg#download'></use>
                            </svg>
                          </a>
                        <?php } ?>
                      </div>
                    </div>
                  </article>
                <?php }
                wp_reset_postdata(); ?>
              </div>
            <?php } ?>
          </div>
        <?php } ?>
      </div>
    </div>
  </div>
</div>