La semaine dernière, j'ai essayé de comprendre la création d'une page de catégorie personnalisée avec pagination. J'ai essayé à bien des égards mais je n'arrive pas à faire la pagination correcte. Si quelqu'un d'entre vous peut aider.
Ce que je voulais réellement faire, c’est dans mon thème wordpress que je voulais créer un modèle personnalisé qui affiche toute la catégorie portant le même nom que le nom de la page.
J'ai créé une page appelée "php" avec un modèle défini sur le modèle que j'essayais de créer. Et lorsque je clique sur cette page, je souhaite afficher tous les messages appartenant à la catégorie "php".
Voici l'échantillon de code ...
<?php
/**
* Template Name: Category Temeplate
*
*/
get_header(); ?>
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<?php
$category = get_post();
$category = $category->post_title;
$query = new WP_Query( array(
'category_name' => $category,
'order' => 'asc',
'post_type' => 'post',
'post_status' => 'publish',
));
?>
<?php
if ($query->have_posts()) {
while ($query->have_posts()) : $query->the_post(); ?>
<article id="post-<?php the_ID(); ?>"
<header class="entry-header">
<?php the_title( sprintf( '<h2 class="entry-title"><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></h2>' ); ?>
</header><!-- .entry-header -->
<div class="entry-content">
<?php
the_content();
?>
</div><!-- .entry-content -->
</article><!-- #post-## --><hr>
<?php endwhile; ?>
<?php the_paging_nav(); ?>
<?php
}
?>
</main><!-- #main -->
</div><!-- #primary -->
<?php get_footer(); ?>
Vous avez quelques problèmes ici
Le code suivant est faux et inutile
$category = get_post();
$category = $category->post_title;
L'objet de page en cours est enregistré dans get_queried_object()
. Vous pouvez donc utiliser cette fonction pour obtenir le titre de votre message. De plus, post_title
n'est pas la propriété correcte à utiliser ici. Vous voulez regarder le slug de publication qui est enregistré dans la propriété post_name
. Le paramètre category_name
exclut la catégorie slug , et non le name . Le paramètre category_name
, à mon avis, est mal nommé. C'est comme donner à une fille un nom de garçon et attendre ensuite que les autres sachent que la personne en question est une fille basée sur son nom.
Un peu en dehors du sujet ici, mais ne mélangez pas votre syntaxe. Choisissez une syntaxe et respectez-la. Comme curlies est le plus facile à déboguer et qu’il est généralement pris en charge par les éditeurs de code, utilisez-les. En outre, indenter correctement votre code, il est plus facile de lire et de déboguer
Vous devez réellement définir la pagination avant de pouvoir l'utiliser. Pour cela, vous devez utiliser le paramètre paged
. Je ne vais pas entrer dans les détails, car ce problème a été traité à maintes reprises sur ce site.
the_paging_nav()
n'est pas une fonction principale. Vous devez donc contacter l'auteur du code pour savoir comment il doit être utilisé avec des requêtes personnalisées.
Quelque chose comme ce qui suit devrait fonctionner
<?php
/**
* Template Name: Category Temeplate
*
*/
get_header(); ?>
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<?php
$current_page = get_queried_object();
$category = $current_page->post_name;
$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
$query = new WP_Query(
array(
'paged' => $paged,
'category_name' => $category,
'order' => 'asc',
'post_type' => 'post',
'post_status' => 'publish',
)
);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post(); ?>
<article id="post-<?php the_ID(); ?>">
<header class="entry-header">
<?php the_title( sprintf( '<h2 class="entry-title"><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></h2>' ); ?>
</header><!-- .entry-header -->
<div class="entry-content">
<?php the_content(); ?>
</div><!-- .entry-content -->
</article><!-- #post-## --><hr>
<?php
}
// next_posts_link() usage with max_num_pages
next_posts_link( 'Older Entries', $query->max_num_pages );
previous_posts_link( 'Newer Entries' );
wp_reset_postdata();
}
?>
</main><!-- #main -->
</div><!-- #primary -->
<?php get_footer(); ?>