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?
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>';
}
}
}
?>