0

在 ExpressionEngine 而在他们的“循环”版本中,我可以将标签添加到任何元素,如下所示:

<li class="{switch='one|two|three|four|five|six'}">

li 的第一次迭代将有一个类,下一个是 2 个,并且在 6 个之后再次循环。我在 wordpress 网站中需要这种类似的功能,但不知道如何实现。是否有内置的 wordpress 函数或者我需要在 php 中编写某种函数?

目前,使用它来尝试使用@Leonard 的解决方案,但是“四”类正在一遍又一遍地重复,而不是循环

<?php

$argsGallery = array(
    'post_type' => 'gallery',
    'orderby'       => 'menu_order',
    'order'         => 'ASC'
);
$the_query = new WP_Query( $argsGallery );

// The Loop
while ( $the_query->have_posts() ) : $the_query->the_post();?>

            <div class="<?php cycle('four|three|five|two|six|four'); ?> columns">
                <div class="thumb">

                    <a class="jackbox" 
                        data-group="images" 
                        data-thumbnail="<?php the_field('image'); ?>" 
                        data-title="Image One" 
                        data-description="#description_1" 
                        href="<?php the_field('image'); ?>"
                    >
                        <div class="jackbox-hover jackbox-hover-black">
                            <p><?php the_field('image_description'); ?> </p>
                        </div>
                        <img 
                            src="<?php the_field('image'); ?>" 
                            alt="responsive lightbox" 
                        />
                    </a>
                </div>
            </div>

<?php
    endwhile;
    wp_reset_query();
    wp_reset_postdata();
?>
4

3 回答 3

1

在寻找完全相同的东西时发现了这个问题......在你发布它 20 分钟后谷歌顶部。疯了……不管怎样!

我想出了一个我已经测试过的函数(虽然很快),你可以将它放入你的functions.php,它可以与标准的Wordpress循环一起使用。它可能需要适应某些需求,但希望这是一个好的起点。

它使用 $wp_query 数组中的 current_post 计数并计算出它需要在循环值中的位置。

function cycle($input, $delimiter = '|', $query = false) {

    if($query == false):
        global $wp_query ;
        $current_post = $wp_query->current_post + 1;
    else:
        $current_post = $query->current_post + 1;
    endif;


    $switches = explode($delimiter, $input);

    $total_switches = count($switches) ;
    $current_set = ceil( $current_post / $total_switches)  ;

    $i = (($current_post - ($current_set * $total_switches)) + $total_switches) - 1 ;

    echo $switches[$i];

}

然后你可以像这样在标准循环中使用它:

 <?php cycle('first|second|third|fourth'); ?>

或者,如果需要,您可以自定义分隔:

 <?php cycle('first*second*third', '*'); ?>

或者,如果您将它与 CUSTOM wp_query 一起使用,则必须像这样将它与作为第三个参数输入的查询一起使用:

 <?php cycle('first|second|third', '|', $the_query); ?>

我确信有一种更简洁的方法可以输入该自定义查询,如果/当我找到方法时,我会继续寻找和更新!

于 2013-01-17T17:23:41.210 回答
0

我知道足够多的 WP,但我从未见过这样的事情。也许这ExpressionEngine就是付费的原因(已经内置了类似的解决方案。在 WP 中,您必须手头上做)。这里有一个自己制作的想法:

更新:@jason-mccreary 的回答我知道我错了。我对此一无所知cycles。但在这里我有一个片段似乎是这样工作的:

function cycle($chunks)
{   
    if ( ! is_array($array = explode('|', $chunks)))
        return;

    static $i    = 0;
    echo $array[$i ++];
    if ($i >= count($array))
        $i   = 0;
}
?>

<?php for ($i = 0; $i < 9;  ++ $i) : ?>
    <li class="<?php echo cycle('one|two|three|four|five|six'); ?>"></li>
<?php endfor; ?>

输出

<li class="one"></li>
<li class="two"></li>
<li class="three"></li>
<li class="four"></li>
<li class="five"></li>
<li class="six"></li>
<li class="one"></li>
<li class="two"></li>
<li class="three"></li>
于 2013-01-17T16:10:55.717 回答
0

这被称为循环函数。不幸的是,PHP 本身并没有这样的功能。

您将需要通过以下方式自定义编写一个:

  • 创建一个函数。这是一个很好的例子
  • 直接在您的循环中使用计数器模数。下面是一个人为的例子:

    $cycles = array('one', 'two', 'three');
    for ($i = 0; $i < 9; ++$i) {
      echo $cycles[$i % 3];
    }
    
于 2013-01-17T16:36:12.720 回答