Обратный ACF Гибкий цикл контента - PullRequest
0 голосов
/ 30 марта 2020

Я работаю с расширенным настраиваемым полем и гибким контентом, и мне интересно, как изменить это значение l oop в php, чтобы последняя статья была в топе. Так же, как сообщения в WordPress. Спасибо!

<?php if( have_rows('article_content') ): ?>
    <?php while( have_rows('article_content') ): the_row(); ?>

        <?php if( get_row_layout() == 'article') : ?>

            <a href="<?php the_sub_field('link'); ?>" class="article">
                <?php $att = get_sub_field('image');?>
                <?php $image = wp_get_attachment_image_src( $att, 'article-crop' ); ?>
                <img src="<?php echo $image[0]; ?>">
                <h3><?php the_sub_field('title'); ?></h3>
            </a>

        <?php elseif( get_row_layout() == 'html' ): ?>
              <?php the_sub_field('html_code'); ?>

        <?php endif; ?>
    <?php endwhile; ?>
<?php endif; ?>

1 Ответ

2 голосов
/ 30 марта 2020

Есть два решения, о которых я могу подумать.

  1. Сохранение get_field('article_content') в массиве, обратное преобразование и отображение строк путем доступа к данным в массиве вместо использования функций ACF.

  2. Используйте ob_start(), ob_get_contents(), ob_end_clean(), чтобы сохранить html каждой строки в массиве и перевернуть его. Я предпочитаю это решение, потому что вы можете использовать функции ACF.

Я адаптировал ваш код со вторым решением:

  <?php 
 $rows_array = array();
 if( have_rows('article_content') ): ?>
        <?php while( have_rows('article_content') ): the_row(); 
          ob_start();
        ?>

        <?php if( get_row_layout() == 'article') : ?>

            <a href="<?php the_sub_field('link'); ?>" class="article">
                <?php $att = get_sub_field('image');?>
                <?php $image = wp_get_attachment_image_src( $att, 'article-crop' ); ?>
                <img src="<?php echo $image[0]; ?>">
                <h3><?php the_sub_field('title'); ?></h3>
            </a>

        <?php elseif( get_row_layout() == 'html' ): ?>
              <?php the_sub_field('html_code'); ?>

        <?php endif; ?>
    <?php 
       $rows_array[] = ob_get_contents();
       ob_end_clean(); 
       endwhile; 
    ?>
 <?php 
   $rows_reversed_array = array_reverse($rows_array);
   echo implode('', $rows_reversed_array);
 ?>
<?php endif; ?>

Код не проверен, но я уверен он должен работать.

Вы также можете заменить:

$rows_array[] = ob_get_contents();
ob_end_clean(); 

на

$rows_array[] = ob_get_clean();

Это более короткий способ сделать то же самое.

...