0

月次アーカイブで投稿をカテゴリ別にグループ化しようとしていますが、それを達成する方法がわかりません。

ここの誰かが私を助けてくれませんか。

よろしく


これは、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>";
            }
        }
        ?>

唯一の問題は、すべての用語に対して同じ投稿タイトルが表示されることです..

4

1 に答える 1

0

各カテゴリの投稿をループすると、そのカテゴリに関連する投稿だけを見つけるのではなく、すべての投稿をループします。以下(テストされていないため、エラーが発生した場合はコメントしてください)は問題を分類するはずです。

ただし、投稿が複数のカテゴリに割り当てられている場合、重複する可能性があることに注意してください。

各投稿をチェックして、目的のカテゴリに含まれていることを確認します。良い点 - クエリは 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;
?>
于 2013-03-21T11:56:45.997 に答える