web-dev-qa-db-fra.com

Type de taxonomie de type de post personnalisé selon la page

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?

4
Joe

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.

3
David Sword

Pages de taxonomie personnalisées:

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:

  1. Vous avez sélectionné le structure Permalink suivante:  enter image description here 

  2. Ensuite, vous avez créé un type de publication personnalisé Book

  3. Taxonomie personnalisée créée Book Category et liée à Book.

  4. Créez ensuite une nouvelle Book intitulée My Horror Story sous Horror en tant que Book Category.

  5. 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.

Modèle

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;
?>
2
Scott

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,
        ),
    ),
);
?>
0
bilimokur