Wordpress Loop有像Shopify‘s Cycle一样的功能吗?

时间:2012-05-23 作者:Olly F

Shopify的循环可以让你在一个循环中的事物之间进行交替。以下是我的示例:

    <div class="{% cycle \'first\', \'second\', \'third\' %}">
      {% include \'product-grid-item\' %}
    </div>
我的问题是,Wordpress有这样的服务吗?我希望在打印循环中的每个项目时,能够循环使用某种设置,例如类名。

4 个回复
最合适的回答,由SO网友:EAMann 整理而成

简短回答,否。

但这是一个非常酷的功能!

要在WordPress中实现类似的功能,您需要在PHP中编写某种迭代器,并让它为您执行逻辑。例如:

$classes = array( \'first\', \'second\', \'third\' );
$iteration = 0;
if ( have_posts() ) : while ( have_posts() ) : the_post();
    $iteration = $iteration >= count($classes) ? 0 : $iteration;
    $class = $classes[$iteration];
    ?>

    <div class="<?php echo $class; ?>">
        <!-- Whatever other stuff you need to do -->
    </div>

    <?php
    $iteration++;
endwhile; endif;

SO网友:mrwweb

核心没有内置任何东西,但您可以轻松地自己制作这样的东西。这里有一个例子,可以给posts类提供post-count-1、post-count-2、post-count-3、post-count-1等等。。。。2.3.1等:

<?php
\\\\ start the counter at 1
$counter = 1;
\\\\ start the loop
while->have_posts() : the_post();
\\\\ figure out our count
$count = \'post-count-\' . $counter % 3;
?>
<article <?php post_class( $count ); ?>>
    \\\\ some more stuff like the title and content
</article>
<?php
\\\\ advance the counter
$counter++;
\\\\ keep looping until the end
endwhile;
?>
如果你想上简单的英语课,你需要ifswitch 要设置的语句$count. 此示例还使用post_class 这为您提供了一些其他有用的类。

附录:我应该补充一点,如果您不需要广泛的浏览器支持(:nth-child()CSS选择器确实是正确的解决方案,如果您需要纯粹用于样式设计的类。jQuery还支持这个选择器,如果需要更好的CSS浏览器支持,可以使用它在页面加载后添加类。

SO网友:Wyck

不完全是,但WordPress确实有body_classpost_class , 默认情况下,它将为您提供自定义选择器,可以使用您选择的任何名称或变量进一步自定义。

http://codex.wordpress.org/Function_Reference/body_class
http://codex.wordpress.org/Function_Reference/post_class

例如,您还可以将其用作过滤器;

add_filter(\'body_class\',\'my_class_names\');

function my_class_names($classes) {
    // Some conditional
    $classes[] = \'my-custom-class-name\';
    // return the $classes array
    return $classes;
}
对不起,我误解了这个问题,没有意识到你想要的是在数字分类方面完全一样的。

SO网友:Matthew Boynes

这是Rails中我最喜欢的助手之一(Shopify用其液态模板语言创建了到的链接)。我为WordPress编写了一个类似的函数,请欣赏:

/**
 * Cycle/alternate unlimited values of a given array.
 * For instance, if you call this function five times with wp_cycle(\'three\', \'two\', \'one\'),
 * you will in return get: three two one three two. This is useful for loops and allows you to
 * cycle classes.
 * For instance, foreach ($posts as $post) { echo \'<div class="\'.wp_cycle(\'odd\',\'even\').\'">...</div>\'; }
 * would alternate between <div class="odd">...</div> and <div class="even">...</div>. Neat, huh?
 * You can pass any data as args and as many as you want, e.g. wp_cycle(array(\'foo\', \'bar\'), false, 5, \'silly\')
 *
 * @param mixed Accepts unlimited args
 * @return mixed
 * @author Matthew Boynes
 */
function wp_cycle() {
    global $wp_cycle_curr_index;
    $args = func_get_args();
    $fingerprint = substr( sha1( serialize( $args ) ), 0, 7 );
    if ( !is_array( $wp_cycle_curr_index) ) $wp_cycle_curr_index = array();
    if ( !isset( $wp_cycle_curr_index[ $fingerprint ] ) || !is_int( $wp_cycle_curr_index[ $fingerprint ] ) ) $wp_cycle_curr_index[ $fingerprint ] = -1;
    $wp_cycle_curr_index[ $fingerprint ] = ++$wp_cycle_curr_index[ $fingerprint ] % count( $args );
    return $args[ $wp_cycle_curr_index[ $fingerprint ] ];
}

结束

相关推荐

WordPress“the loop”中需要的简单Foreach循环帮助

我需要“循环”中的foreach循环This is my current code (index.php) :<?php if (have_posts()) : while (have_posts()) : the_post(); ?> <div><a href=\"<?php the_permalink(); ?>\" title=\"<?php get_the_title(); ?>\"> <?php the_title()