webentwicklung-frage-antwort-db.com.de

Fragen Sie den Beitrag aller Kategorien mit demselben Tag auf 1 Seiten ab

Wie kann ich Posts aus Kategorien mit bestimmten Tags abfragen? Wenn ich zum Beispiel " localhost/tag/tutorial " besuche, wird auf der Archivseite der gesamte Beitrag aller Kategorien mit dem Tutorial-Tag angezeigt.

Aber die Ansicht würde nach Kategorien getrennt. Zum Beispiel:

Kategorie 1

  • Kategorie 1 Beitrag 1 Mit Tutorial-Tag
  • Kategorie 1 Beitrag 2 mit Tutorial-Tag

Kategorie 2

  • Kategorie 2 Beitrag 2 Mit Tutorial-Tag
  • Kategorie 2 Post 10 Mit Tutorial-Tag

NB: Die Beiträge werden in jeder Kategorie mit denselben Tags angezeigt.

Ich habe einen Code, der die neuesten Beiträge in jeder Kategorie anzeigt

<?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(); ?>

Der obige Code würde die neuesten Beiträge in jeder Kategorie mit diesem Look anzeigen.

Name der Kategorie 1

  • Kategorie 1 Beitrag 1
  • Kategorie 1 Beitrag 2

Name der Kategorie 2

  • Kategorie 1 Beitrag 1
  • Kategorie 1 Beitrag 2

Name der Kategorie 3

  • Kategorie 1 Beitrag 1
  • Kategorie 1 Beitrag 2

Ich möchte ein Tag-Archiv erstellen, das mit dieser Vorlage funktioniert, und die Posts werden in jeder Kategorie angezeigt, auch wenn die Posts dieselben Tags haben.

1
GaroPpo

Dies wird dazu beitragen, dass die Kategorie auf der Tag-Archivseite veröffentlicht wird. Gib mir Bescheid.

<?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

Bitte probieren Sie dieses und lassen Sie es mich wissen, wenn es hilft.

<?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. Ich habe gerade den Post-Titel gedruckt. Wenn dies für Sie funktioniert, fügen Sie bitte weitere Parameter zum Drucken hinzu.

Vielen Dank

EDIT: Für alle Tags anzeigen.

   <?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 Hier ist ein optimierter Code, den ich dir vorgeschlagen habe. Ich hoffe, dies wird Ihre Anforderungen erfüllen.

<?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