J'ai un type de message personnalisé appelé books
. Ce type de message personnalisé a une taxonomie appelée book_category
. À partir de maintenant et dans un avenir proche, il existe 5 catégories de filtrage par livre.
Désormais, chacune de ces catégories a sa propre page respective qui interrogera les livres en fonction de leur catégorie (entre autres informations auxiliaires relatives à chaque catégorie).
Dans le code ci-dessous, j'ai tenté d'interroger les publications en fonction de is_page()
. Bien que cela fonctionne ... quelque chose me dit qu'il existe un moyen plus efficace/approprié de gérer cela.
<?php
if (is_page('horror')) {
$theTermBasedOnPage = 'horror';
} elseif (is_page('comedy')) {
$theTermBasedOnPage = 'comedy';
} elseif (is_page('romantic')) {
$theTermBasedOnPage = 'romantic';
} elseif (is_page('nonfiction')) {
$theTermBasedOnPage = 'nonfiction';
} elseif (is_page('drama')) {
$theTermBasedOnPage = 'drama';
}
$args = array(
'posts_per_page' => -1,
'post_type' => 'books',
'post_status' => 'publish',
'tax_query' => array(
array(
'taxonomy' => 'book_category',
'terms' => $theTermBasedOnPage,
),
),
);
?>
Quel est le meilleur moyen d'interroger les publications (Type de publication personnalisée> Taxonomie) en fonction de la page?
Pour que cela soit plus efficace, au lieu d'argumenter le slug de page actuel, il vous suffit de placer le slug actuel comme valeur de termes de tax_query. Quelque chose comme:
global $post;
$args = array(
'posts_per_page' => -1,
'post_type' => 'books',
'post_status' => 'publish',
'tax_query' => array(
array(
'taxonomy' => 'book_category',
'field' => 'slug',
'terms' => $post->post_name, // which'd be `horror` or `comedy`, etc
),
),
);
Notez qu'il y a une forte probabilité d'erreur humaine en procédant de cette façon: par exemple, avoir une page de nonfiction
mais un terme book_category de non-fiction
pourrait casser la logique et causer des problèmes.
Je ne connais pas le contexte de votre travail, mais si l'objectif est juste "chacune de ces catégories a sa propre page" vous n'avez pas besoin de créer cette requête personnalisée avec -manual-page-relation pour chaque terme. Les taxonomies et termes de WordPress auront leurs propres URL si vous avez enregistré la taxonomie sous la forme public
et publicly_queryable
. (Devinez ici, mais) Vous pouvez probablement visiter your-site.com/book_category/horror/
et voir la liste des livres d'horreur. Vous pouvez ensuite personnaliser les fichiers de modèle pour tous les termes ou individuellement en utilisant la hiérarchie de modèles WordPress comme référence.
Vous ne devriez pas avoir à créer de requête personnalisée avec $args
pour obtenir les pages de taxonomie personnalisées. Vous pouvez simplement suivre la structure d'URL fournie par WordPress pour cela.
Par exemple, disons:
Ensuite, vous avez créé un type de publication personnalisé Book
Taxonomie personnalisée créée Book Category
et liée à Book
.
Créez ensuite une nouvelle Book
intitulée My Horror Story
sous Horror
en tant que Book Category
.
Et, créé une autre nouvelle Book
intitulée My Comedy Story
sous Comedy
en tant que Book Category
.
Avec tous les autres paramètres par défaut, WordPress générera automatiquement les URL suivantes pour vous:
// Book Links
https://example.com/book/my-comedy-story/
https://example.com/book/my-horror-story/
// Book Category Links
https://example.com/book-category/comedy/
https://example.com/book-category/horror/
Utilisez ces URL pour les pages de taxonomie personnalisée de votre choix.
Vous pouvez également éditer les fichiers de modèle de thème pour créer le design souhaité. Consultez Hiérarchie des modèles WordPress pour apprendre à le faire.
Par exemple, vous pouvez créer un fichier modèle nommé taxonomy-book-category.php
pour concevoir des pages de taxonomie personnalisées Book Category
.
Dans ce fichier de modèle, utilisez WordPress Template Tags et The Loop pour les requêtes nécessaires.
Par exemple, un fichier modèle très simple peut ressembler à:
<?php
if ( have_posts() ) : while ( have_posts() ) : the_post();
the_content();
endwhile;
else :
_e( 'Sorry, no book matched your criteria.', 'textdomain' );
endif;
?>
Essaye ça:
<?php
// Get post's all terms.
$terms = wp_get_post_terms( get_the_ID(), 'book_category' );
// Get first term ID
$currentPostTermID = $terms[ 0 ]->term_id;
$args = array(
'posts_per_page' => -1,
'post_type' => 'books',
'post_status' => 'publish',
'tax_query' => array(
array(
'taxonomy' => 'book_category',
'terms' => $currentPostTermID,
),
),
);
?>