web-dev-qa-db-fra.com

Boucle avec catégories dynamiques

J'ai besoin de créer une boucle WordPress qui affiche tous les articles associés à une catégorie, mais j'ai besoin que cette catégorie corresponde à la page que je regarde.

Par exemple, supposons que j'ai la catégorie 1 avec toutes les publications que je veux afficher sur la page 1. Lorsque je passe à la page 2, je souhaite que cette catégorie passe à la catégorie 2 afin que toutes les publications associées apparaissent sur la page 2.

Courant, ma boucle ressemble à ceci:

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

Évidemment, cela va afficher tous les articles, peu importe la catégorie. Je dois m'assurer que le changement de catégorie dépend de la page.

Aucune suggestion?

4
Nathan Alvarez

Le code ci-dessous active les catégories pour les pages. Un exemple de modèle de page est fourni. Celui-ci parcourt les catégories attribuées à la page et affiche les publications de chaque catégorie.

Si vous souhaitez limiter l'utilisateur à la sélection d'une seule catégorie, vous pouvez utiliser une solution telle que Taxonomie unique terme .

Associez la taxonomie category au type de poste page:

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

Exemple de modèle de page "bare bones" (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