Type de taxonomie de type de message personnalisé de requête basé sur la page

4

J'ai un type de message personnalisé appelé books . Ce type de publication personnalisée a une taxonomie appelée book_category . À partir de maintenant et dans un avenir prévisible, il existe 5 catégories dans lesquelles chaque livre peut être filtré.

Chacune de ces catégories a désormais sa propre page 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 sur la base 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?

    
posée Joe 08.08.2018 - 22:08

3 réponses

3

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 existe une strong 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 rompre la logique et causer des problèmes.

Je ne connais pas le contexte de votre travail, mais si l'objectif est simplement "chacune de ces catégories a sa propre page respective" vous n'avez pas besoin de créer cette coutume. -query-with-manual-page-relation pour chaque terme. Les taxonomies et les termes WordPress auront leurs propres URL si vous avez enregistré la taxonomie sous les noms public et publicly_queryable . (Devinant 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.

    
réponse donnée David Sword 08.08.2018 - 22:16
2

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é la structure de lien permanent suivante:

  2. VousavezensuitecrééuntypedemessagepersonnaliséBook

  3. CréationdelataxonomiepersonnaliséeBookCategoryetliaisonavecBook.

  4. CréezensuiteunnouveauBookintituléMyHorrorStorysousHorrorentantqueBookCategory.

  5. EtcrééunautrenouveauBookintituléMyComedyStorysousComedyentantqueBookCategory.

Avectouslesautresparamètrespardéfaut,WordPressgénéreraautomatiquementlesURLsuivantes:

//BookLinkshttps://example.com/book/my-comedy-story/https://example.com/book/my-horror-story///BookCategoryLinkshttps://example.com/book-category/comedy/https://example.com/book-category/horror/

UtilisezcesURLpourlespagesdetaxonomiepersonnaliséedevotrechoix.

Modèle

Vouspouvezégalementmodifierlesfichiersdemodèledethèmepourcréerledesignsouhaité.Découvrez 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ée Book Category .

Dans ce fichier de modèle, utilisez WordPress Balises de modèle et La boucle pour les requêtes nécessaires.

Par exemple, un fichier de 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;
?>
    
réponse donnée Scott 08.08.2018 - 22:53
0

Essayez ceci:

<?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,
        ),
    ),
);
?>
    
réponse donnée bilimokur 08.08.2018 - 22:57

Lire d'autres questions sur les étiquettes