类别列表循环-每年添加分隔符

时间:2016-11-19 作者:th3rion

我有一个代码,它用图像显示类别列表。Im使用插件将图像附加到类别。

工作代码为:

<?php
$args=array(
  \'orderby\' => \'name\',
  \'order\' => \'ASC\',
)
?>
 <?php foreach (get_categories( $args ) as $cat) : ?>
<h3><a href="<?php echo get_category_link($cat->term_id); ?>"><?php echo $cat->cat_name; ?></a></h3>
<a href="<?php echo get_category_link($cat->term_id); ?>"><img src="<?php echo z_taxonomy_image_url($cat->term_id); ?>" /></a>
 <?php endforeach; ?>
问题是有很多种类。我想按年份将它们分开(只需添加一行或文本或其他内容)。有可能吗?我知道分类不存储日期。帖子只在今年的类别中发布,所以这可能会有所帮助吗?

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

这是完整的工作代码。我不是php开发人员,所以可能有一些事情可以而且应该纠正,但它是有效的。

    <?php 

            $args=array(\'orderby\' => \'ID\', \'order\' => \'DESC\');
            $year="2005";

            foreach (get_categories( $args ) as $cat) : 

            $post_ids = get_posts(array(
                \'posts_per_page\'   => 1, 
                \'tax_query\'     => array(
                    array(
                        \'taxonomy\'  => \'category\',
                        \'field\'     => \'id\',
                        \'terms\'     => $cat,
                    ),
                ),
                \'fields\'        => \'ids\', 
            ));

            $cat_post_id=$post_ids[array_rand($post_ids)];
            $cat_post_publish_year=get_the_date( \'Y\', $cat_post_id);

            if($year!==$cat_post_publish_year)
            {

    ?>      
            <div style="display: block; clear: both; width: 100%; height: 20px; border-top: 1px solid #fff;"></div>

    <?php

            $year=$cat_post_publish_year; }

    ?>
            <div style="float: left;">

                <a href="<?php echo get_category_link($cat->term_id); ?>"><img src="<?php echo z_taxonomy_image_url($cat->term_id); ?>" /></a>
                <h3><a href="<?php echo get_category_link($cat->term_id); ?>"><?php echo $cat->cat_name; ?></a></h3>

            </div>

    <?php endforeach; ?>

SO网友:Ranuka

我不知道每个月都有每个类别的目的是什么,因为WordPress有每月的存档。你可以使用它。

然而,你要做的可能是。

由于时间不够,我无法在这里编写代码。但我可以为开发它提供指导。

阅读代码部分的注释。

<?php
$args=array(
  \'orderby\' => \'name\',
  \'order\' => \'ASC\',
)

$year="" // Assign a oldest year for this. If your first post is published in  2011, $year=2011
?>

<?php foreach (get_categories( $args ) as $cat) : 
    $cat_post_id=""; //Get the latest post id of current category and assign it to 
    $cat_post_publish_year=""; //Then find the post date of that post and assign the YEAR of that date (Only the year)

    if($year!==$cat_post_publish_year)
    {
        echo "<hr>";// Write anything to separate it.
        $year=$cat_post_publish_year;
    }


?>

    <h3><a href="<?php echo get_category_link($cat->term_id); ?>"><?php echo $cat->cat_name; ?></a></h3>
    <a href="<?php echo get_category_link($cat->term_id); ?>"><img src="<?php echo z_taxonomy_image_url($cat->term_id); ?>" /></a>

<?php endforeach; ?>