“每隔一个”Foreach语句的不同输出?

时间:2012-02-15 作者:user1178152

我目前正在使用以下代码来获取类别页面中的子类别,并获取每个子类别的帖子。在回显“span-12”(第14行)的部分,我希望它对其他子类别回显“span-12 last”。

我的代码:

<?php  $cats = get_categories(\'child_of=\'.get_query_var(\'cat\')); 

foreach ($cats as $cat) :

$args = array(
\'orderby\' => \'title\',
\'order\' => \'ASC\',
\'posts_per_page\' => -1, // max number of post per category
\'category__in\' => array($cat->term_id)
);
$my_query = new WP_Query($args); 

    if ($my_query->have_posts()) : 
    echo \'<div id = "seasonBlock" class = "span-12" >\';
    echo \'</br><h3 class = "seasonTitle" >\'.$cat->name.\'</h3>\';

    while ($my_query->have_posts()) : $my_query->the_post(); ?>     
    <?php /*general loop output; for instance: */ ?>
    <div id = "episodeBlock" >
    <a href="<?php the_permalink() ?>"><?php the_title(); ?></a>  
    aired <?php if(!function_exists(\'how_long_ago\')){the_time(\'F jS, Y\'); } else { echo how_long_ago(get_the_time(\'U\')); } ?><br />  
    </div>
    <?php endwhile; ?>
    </div>
    <?php else : 
    echo \'No Posts for \'.$cat->name;                
    endif; 
wp_reset_query();

endforeach; ?>
在本部分中,(第14行)

 echo \'<div id = "seasonBlock" class = "span-12" >\';
我想对每个其他类别进行回应,我希望它像这样回应

 echo \'<div id = "seasonBlock" class = "span-12 last" >\';
我找到了一些用于添加和检查是否奇怪的代码,但这似乎不适用于此代码。

2 个回复
SO网友:Matthew Boynes

我编写了一个函数来帮助实现这一点,以便在功能上模仿Ruby on Rails的cycle 助手:

/**
 * Cycle/alternate unlimited values of a given array.
 * 
 * For instance, if you call this function five times with
 * `cycle_it( \'three\', \'two\', \'one\' )`, you will in return get:
 *    three two one three two
 * 
 * This is useful for loops and allows you to cycle classes.
 *
 * Example:
 * 
 *     foreach ( $posts as $post ) {
 *         printf(
 *             \'<div class="%s">...</div>\',
 *             esc_attr( cycle_it( \'odd\', \'even\' ) )
 *         );
 *     }
 * 
 * This would alternate between `<div class="odd">...</div>` and
 * `<div class="even">...</div>`.
 * 
 * You can pass any data as args and as many as you want, e.g.
 * 
 *     cycle_it( array( \'foo\', \'bar\' ), false, 5, \'silly\' )
 *
 * @param mixed ...$args Any number of arguments to cycle.
 * @return mixed Alternating value passed through the function arguments.
 */
function cycle_it() {
    static $cycle_curr_index;
    $args = func_get_args();
    $fingerprint = sha1( serialize( $args ) );
    if ( ! is_array( $cycle_curr_index ) ) {
        $cycle_curr_index = array();
    }
    if ( ! is_int( $cycle_curr_index[ $fingerprint ] ) ) {
        $cycle_curr_index[ $fingerprint ] = -1;
    }

    $cycle_curr_index[ $fingerprint ] = ++$cycle_curr_index[ $fingerprint ] % count( $args );
    return $args[ $cycle_curr_index[ $fingerprint ] ];
}
如果您将其添加到主题的功能中。php文件,然后可以将代码更改为:

回响<div id="seasonBlock" class="span-12\' . esc_attr( cycle_it( \'\',\' last\' ) ) . \'" >\';

SO网友:chrisguitarguy

可以使用循环计数器来完成此操作。在循环之前设置一个计数器变量,检查它除以2是否返回0余数(在本例中),并相应地调整类。在每个循环结束时递增计数器。

编辑:根据@goldenapples的建议,更新代码以使用foreach循环中的内置计数器

<?php  
$cats = get_categories(\'child_of=\'.get_query_var(\'cat\'));
foreach ($cats as $counter => $cat) :
    $class = ($counter % 2) != 0 ? \'last\' : \'\';
    // snip snip
    echo \'<div id="seasonBlock" class="span-12 \' . $class . \'" >\';
    // snip snip
endforeach; 
?>

结束

相关推荐

IS_FROWN_PAGE只适用于主题文件,不适用于函数.php

如果我在首页中使用is\\u front\\u page()。php文件它按预期工作。但是,如果我在主题函数中使用相同的函数。php文件它不工作。这是正常行为吗?如果不是的话,能不能设法解决问题?在“设置->阅读”中,我将我的首页设置为一个名为“首页”的页面,所以我认为一切都已设置完毕。EDIT将以下内容添加到函数中。php不起作用,但我保证,如果我在标题中添加is\\u home\\u page(),它会像预期的那样起作用。php文件add_action(\'init\', \'my_test\'