it-swarm.com.de

Schleife mit dynamischen Kategorien

Ich muss eine WordPress-Schleife erstellen, in der alle mit einer Kategorie verknüpften Beiträge angezeigt werden. Diese Kategorie muss jedoch mit der angezeigten Seite übereinstimmen.

Beispiel: Angenommen, ich habe Kategorie 1 mit allen Posts, die auf Seite 1 angezeigt werden sollen. Wenn ich zu Seite 2 gehe, soll diese Kategorie in Kategorie 2 geändert werden, damit alle zugehörigen Posts auf Seite 2 angezeigt werden.

Aktuell sieht meine Schleife so aus:

<?php query_posts('$cat_ID'); ?>
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
        <?php the_content(); ?>

    <?php endwhile; else: ?>

        <p>Sorry, this page does not exist</p>

    <?php endif; ?>
</div>

Offensichtlich werden alle Beiträge unabhängig von der Kategorie angezeigt. Ich muss sicherstellen, dass sich die Kategorie je nach Seite ändert.

Irgendwelche Vorschläge?

4
Nathan Alvarez

Der folgende Code aktiviert Kategorien für Seiten. Es wird eine Beispielseitenvorlage bereitgestellt, die die der Seite zugewiesenen Kategorien durchläuft und die Beiträge für jede Kategorie anzeigt.

Wenn Sie den Benutzer auf die Auswahl nur einer Kategorie beschränken möchten, können Sie eine Lösung wie Taxonomy Single Term verwenden.

Ordnen Sie die Taxonomie category dem Beitragstyp page zu:

function wpse_page_category() {
    register_taxonomy_for_object_type( 'category', 'page' );    
}
add_action( 'init', 'wpse_page_category', 999  );

Beispiel für ein Bare-Bones-Seiten-Template (template-page-categories.php):

<?php
/**
 * Template Name: Page Categories
 *
 */

get_header(); ?>


<?php 
    // Standard loop for page content
    if ( have_posts() ) {
        while ( have_posts() ) {
            the_post();
            the_title( '<h1>', '</h1>' );
            the_content();
        }
    }


    // Get the category assigned to this page and list the posts in this category.
    // This code works when multiple categories have been assigned to the page.
    $page_categories = get_the_terms( get_the_ID(), 'category' );
    if ( $page_categories && ! is_wp_error( $page_categories ) ) {

        foreach ( $page_categories as $page_category ) {

            $posts_query = new WP_Query( [
                'post_type' => 'post',
                'cat' => $page_category->term_id,
            ] );


            if ( $posts_query->have_posts() ) {
                echo '<h2> Posts from the <em>' . esc_html( $page_category->name ) . '</em> category:</h2>';
                while ( $posts_query->have_posts() ) {
                    $posts_query->the_post();
                    the_title( '<h3>', '</h3>' );
                    //the_content();
                }
                echo '<hr>';
            }
        }
    }

?>
1
Dave Romsey