在每月档案中按类别对帖子进行分组

Posted

技术标签:

【中文标题】在每月档案中按类别对帖子进行分组【英文标题】:Group Posts by Category in Monthly Archive 【发布时间】:2013-03-21 08:01:11 【问题描述】:

我正在尝试在每月存档中按类别对帖子进行分组,但不知道如何实现。

这里有人可以帮帮我吗?

问候


这是我在archive.php中使用的php代码

<?php
        $terms = get_terms("publicationcat");
        $count = count($terms);
        if ( $count > 0 )
            foreach ( $terms as $term ) 
                echo "<div class=\"publication-area\">";
                echo '<h3 class="term-heading">' . $term->name . '</h3>';
                echo "<div class=\"publication-txt\">";
                echo "<ul>";
                while ( have_posts() ) : the_post();
                echo "<li><a target=\"_blank\" href=\"" . wp_get_attachment_url(get_post_meta($post->ID, 'document_file_id', true)) . "\">".$post->post_title."</a></li>";
                endwhile; 
                echo "</ul>";
                echo "</div>";
                echo "</div>";
            
        
        ?>

唯一的问题是它为所有条款显示相同的帖子标题..

【问题讨论】:

嗨Himanshu,你现在用什么函数来输出存档? 嗨,巴里,我刚刚编辑了问题并粘贴了 php 代码.. 【参考方案1】:

当您遍历每个类别中的帖子时,您不仅会找到与该类别相关的帖子,而是会遍历每个帖子。以下(未经测试,如果您遇到错误请评论)应该对您的问题进行排序。

但请注意,如果帖子被分配到多个类别,您仍然可能会得到一些重复。

检查每个帖子以确保它属于所需的类别。好点 - 只有一个查询。坏点 - 循环遍历每只猫的所有帖子。

<?php
$terms = get_terms('publicationcat');

if(!empty($terms)) : foreach($terms as $term) :
?>
        <div class="publication-area">

            <?php sprintf('<h3 class="term-heading">%1$s</h3>', $term->name); ?>
            <div class="publication-txt">

                <?php if($my_query->have_posts()) : ?>

                    <ul>

                    <?php if(in_category($term->slug)) : ?>

                    <?php while($my_query->have_posts()) : $my_query->the_post(); ?>

                            <?php $link = wp_get_attachment_url(get_post_meta($post->ID, 'document_file_id', true)); ?>
                            <li><a target="_blank" href="<?php echo ($link !== '') ? $link : ''; ?>">
                                <?php the_title(); ?>
                            </a></li>

                        <?php endwhile; ?>

                    <?php endif; ?>

                    </ul>

                <?php endif; ?>

            </div>

        </div>
<?php
    endforeach;
endif;
?>

重新查询帖子并输出所有抓取的内容。好点 - 只提取循环类别所需的帖子。坏点 - 大量查询,太多查询可能会降低您的网站速度。

<?php
$terms = get_terms('publicationcat');

if(!empty($terms)) : foreach($terms as $term) :
?>
        <div class="publication-area">

            <?php sprintf('<h3 class="term-heading">%1$s</h3>', $term->name); ?>
            <div class="publication-txt">

                <?php
                $args = array(
                    'cat' => $term->term_id
                );
                $my_query = new WP_Query($args);
                ?>
                <ul>
                    <?php if($my_query->have_posts()) : while($my_query->have_posts()) : $my_query->the_post(); ?>

                            <?php $link = wp_get_attachment_url(get_post_meta($post->ID, 'document_file_id', true)); ?>
                            <li><a target="_blank" href="<?php echo ($link !== '') ? $link : ''; ?>">
                                <?php the_title(); ?>
                            </a></li>

                        <?php endwhile; ?>
                    <?php endif; ?>
                    <?php wp_reset_query(); ?>

                </ul>

            </div>

        </div>
<?php
    endforeach;
endif;
?>

【讨论】:

你好大卫,我刚刚尝试了你的代码,但它不工作并且没有显示任何东西。另外我正在使用代码来显示日期档案,所以它是否适合运行自定义查询? 立即尝试。已更正一个错字并对此进行了测试,在我的网站上运行良好。此代码也适用于您的存档,您只需根据日期范围的需要修改查询。 好的,所以我添加了另一种可能更适合存档页面的方法(两个示例中的第一个)。总体而言,它可能效率较低,但在处理日期时,它更容易、更快捷,因为您不必手动构造查询。 能否请您重新发布一个我可以在存档页面中使用的查询?

以上是关于在每月档案中按类别对帖子进行分组的主要内容,如果未能解决你的问题,请参考以下文章

在 MVC4 视图中按类别对订单进行分组

我如何更好地在 woocommerce rest api 中按类别对产品进行分组?

在 jQuery 中按数据属性对 HTML 元素进行分组和计数

如何在 Pandas 中按子类别分组? [复制]

如何在laravel中按类别过滤帖子?

php 在wordpress中按类别列出帖子