web-dev-qa-db-ja.com

1ページに同じタグを持つすべてのカテゴリからの投稿を検索する

特定のタグを持つカテゴリから投稿をクエリする方法例えば、私が " localhost/tag/tutorial "にアクセスした場合、アーカイブページにはすべてのカテゴリからのすべての投稿がチュートリアルタグ付きで表示されます。

しかし、見解はカテゴリーによって分けられます。例えば:

カテゴリー1

  • カテゴリ1投稿1チュートリアルタグ付き
  • チュートリアルタグが付いたカテゴリ1の投稿2

カテゴリー2

  • カテゴリ2投稿2チュートリアルタグ付き
  • カテゴリー2投稿10チュートリアルタグ付き

注意:投稿は各カテゴリで同じタグで表示されます。

各カテゴリの最新の投稿を表示するコードがあります。

<?php
        $categories = get_categories();
        foreach($categories as $category) { ?>

        <div class="CategoryPost">
          <h2><?php echo $category->name; ?></h2>
          <ul>
          <?php
            $post_args = array(
              'category' => $category->term_id,
              'numberposts' => 9999,
              'orderby'=> 'post_date',
              'order' => 'ASC',
              'post_type' => 'post'
            );

            $posts = get_posts($post_args);
            foreach($posts as $post) { ?>
              <li id="post-<?php the_ID(); ?>"><span><?php the_time('d M Y') ?></span> <i class="Seperate">&raquo;</i> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
            <?php } ?>
            </ul>
          </div>
        <?php }
        wp_reset_postdata(); ?>

上記のコードは、この外観で各カテゴリの最新の投稿を表示します。

カテゴリ1の名前

  • カテゴリー1投稿1
  • カテゴリー1投稿2

カテゴリ2の名前

  • カテゴリー1投稿1
  • カテゴリー1投稿2

カテゴリ3の名前

  • カテゴリー1投稿1
  • カテゴリー1投稿2

そのテンプレートで動作するタグアーカイブを作成したいと思います。投稿に同じタグが付いていても、投稿は各カテゴリに表示されます。

1
GaroPpo

これは、タグアーカイブページのカテゴリ投稿を取得するのに役立ちます。お知らせ下さい。

<?php       

        $current_tag = single_tag_title( $prefix = '', $display = false );
        $categories = get_categories( array('hide_empty' => TRUE) );
        foreach($categories as $category) { ?>
        <?php
            $args=array(
                'posts_per_page' => -1, 
                'tag' => $current_tag,
                'cat' => $category->term_id,
            );

            $the_query = new WP_Query( $args );

            if ( $the_query->have_posts() ) {
                ?>
                <div class="CategoryPost">
                    <h2><?php echo "Tag: " . $current_tag; ?></h2>
              <h2><?php echo "Category: " . $category->name; ?></h2>
              <ul>
              <?php
                echo '<ul>';
                while ( $the_query->have_posts() ) {
                    $the_query->the_post();
                    echo '<li>Post title: ' . get_the_title() . '</li>';
                }
                echo '</ul></ul></div><br>';
            } 
            ?>

        <?php } 
        wp_reset_postdata();
1
Sid

これを試して、それが役立つかどうか私に知らせてください。

<?php
        $categories = get_categories( array('hide_empty' => TRUE) );
    foreach($categories as $category) { ?>
    <?php
        $args=array(
            'posts_per_page' => -1, 
            'tag' => 'tutorial',
            'cat' => $category->term_id,
        );

        $the_query = new WP_Query( $args );

        if ( $the_query->have_posts() ) {
            ?>
            <div class="CategoryPost">
          <h2><?php echo $category->name; ?></h2>
          <ul>
          <?php
            echo '<ul>';
            while ( $the_query->have_posts() ) {
                $the_query->the_post();
                echo '<li>' . get_the_title() . '</li>';
            }
            echo '</ul></ul></div>';
        } 
        ?>

    <?php }
    wp_reset_postdata(); ?>

P.S記事のタイトルを印刷したところです。これがうまくいくならば、印刷するために他のパラメータも追加してください。

ありがとう

編集:すべてのタグを表示します。

   <?php 
        $tags_array = get_tags();
        $categories = get_categories( array('hide_empty' => TRUE) );
        foreach($tags_array as $tag){
        foreach($categories as $category) { ?>
        <?php
            $args=array(
                'posts_per_page' => -1, 
                'tag_id' => $tag->term_id,
                'cat' => $category->term_id,
            );

            $the_query = new WP_Query( $args );

            if ( $the_query->have_posts() ) {
                ?>
                <div class="CategoryPost">
                    <h2><?php echo "Tag: " . $tag->name; ?></h2>
              <h2><?php echo "Category: " . $category->name; ?></h2>
              <ul>
              <?php
                echo '<ul>';
                while ( $the_query->have_posts() ) {
                    $the_query->the_post();
                    echo '<li>Post title: ' . get_the_title() . '</li>';
                }
                echo '</ul></ul></div><br>';
            } 
            ?>

        <?php } }
        wp_reset_postdata(); ?>
0
Sid

@GaroPpoここに、私があなたに提案した調整されたコードがあります。これがあなたの要求を満たすことを願っています。

<?php
    $tag_id = array(12, 13, 14);
    $taxonomy = 'testimonial-category';
    $postType = 'testimonial';
    $terms = get_terms(['taxonomy' => $taxonomy, 'orderby' => 'term_id', 'hide_empty' => true]);
?> <div class="add-accordion"> <?php
    foreach($terms as $term){
        if($term->parent == 0){
            echo '<h3>' . $term->name . '</h3>';
            continue;
        }  $posts = get_posts(array('post_status' =>'publish','post_type' => $postType, 'tag__in' => $tag_id,
                array(
                    'taxonomy' => $taxonomy,
                    'field' => 'term_id',
                    'terms' => $term->term_id,
                ),));
        ?>
        <div class="add-accordion">
            <h3><?php echo $term->name ?></h3>
            <div class="add-accordion">
                <?php foreach($posts as $post){ ?>
                    <h3><?php echo $post->post_title ?></h3>
                    <div class="">
                        <?php echo get_the_content($post->ID) ?>
                    </div>
                <?php } ?>
            </div>
        </div>
        <?php
    }
?>
0
BlueSuiter