web-dev-qa-db-fra.com

Requête conditionnelle du type de message personnalisé et de la taxonomie personnalisée

Je travaille sur un projet qui a

  • un type de message personnalisé appelé "Déclaration d'expérience"
  • Taxonomie personnalisée attachée à ce type de message appelée "Expertise"
  • 6 termes différents pour la taxonomie douanière: côtière, continentale, marine, voie navigable, bateau, télécommunications

Donc, j'ai créé cette boucle, cela fonctionne très bien et j'ai créé 6 pages de modèle différentes avec cette boucle dans chaque (je change juste le terme pour chaque) <?php $page = (get_query_var('paged')) ? get_query_var('paged') : 1; query_posts("post_type=experiencestatements&expertise=coastal&showposts=10&paged=$page"); if ( have_posts() ) : while ( have_posts() ) : the_post() ?>

Donc, cela fonctionne bien, mais je dois créer une page de modèle différente: c'est-à-dire page-exp-stmt-coastal.php pour chaque terme. Je voudrais avoir une seule page de modèle avec des instructions conditionnelles pour chaque terme au lieu de 6 (et en comptant) les pages de modèle. Avoir plus de 6 pages différentes signifie que je dois y aller et les changer chaque fois que le client veut un Tweak.

En résumé, j'ai besoin d'aide pour créer une étiquette conditionnelle qui modifie la boucle en fonction du terme de taxonomie. ET je ne sais pas comment faire ça. Toute aide est grandement appréciée.

Merci Larry

1
Larry4Design

Il existe plusieurs façons de procéder. L'une des méthodes consiste à utiliser get_the_terms.

La logique serait d'exécuter la boucle et de personnaliser la sortie en fonction des termes de cette taxonomie (cela ne fonctionnera probablement pas immédiatement).

//do a custom query here if needed
 if ( have_posts() ) : while ( have_posts() ) : the_post();

 $terms = get_the_terms($post->ID, 'Expertise');
//this will return and array of terms for your Expertise taxonomy.

   foreach ( $terms as $term ) {

     if($term->name == 'marine') {

       // do custom stuff here 

     }elseif($term->name == 'waterway') {

       // do custom stuff here
     }elseif .... 

Après avoir commenté, il semble que vous ne vouliez pas de contenu personnalisé par terme, c'est-à-dire le même contenu pour les 6 termes. Cela peut être fait avec une simple boucle de requête, encore une fois, il existe plusieurs façons de le faire.
http://codex.wordpress.org/Class_Reference/WP_Query

$args = array(
    'tax_query' => array(
        'relation' => 'AND',
        array(
            'taxonomy' => 'Expertise',
            'field' => 'slug',
            'terms' => array( 'marine', 'waterway', 'you_other_terms_here' ),
        ),

    )
)
$query = new WP_Query( $args );

Une autre façon consiste à utiliser ma suggestion initiale et à juste faire une correspondance pour tous les get_the_terms dans le tableau que vous voulez utiliser avec in_array.

foreach ( $terms as $term ) {

if (in_array('marine', '$term')) && (in_array('waterway', '$term')) && etc..
   //do stuff
}
1
Wyck

ne pourriez-vous pas créer un modèle appelé

taxonomy-Expertise.php

selon: http://codex.wordpress.org/Template_Hierarchy#Custom_Taxonomies_display

semble que vous ne devriez pas avoir à ajuster la boucle du tout, car WP utilisera déjà la requête appropriée pour chaque terme de la taxonomie. mais vous pouvez toujours tester le nom du terme ici (ce serait dans les vars de requête) et déclencher un code d'affichage différent selon les besoins.

0
helgatheviking