web-dev-qa-db-fra.com

Boucle personnalisée avec plusieurs requêtes de taxonomie

Toutes mes excuses - nouveauté dans stackexchange et effectivement posté ceci dans Stack Overflow parce que je ne savais pas qu'il y avait une jonction spécifique WP.

Mon problème--

Ce que j'ai: J'ai le code pour une liste d'événements de travail. Il y a un seul poste personnalisé (événements) et trois taxonomies (lieu, mois, type). Le code suivant répertorie les événements futurs et les commande par un champ personnalisé (date_début). La liste des événements est également triable par taxonomie. Par exemple, vous pouvez ne regarder que les événements de décembre (mois) ou les événements par lieu (Montana).

Ce que je ne peux pas comprendre: Comment trier les listes selon deux taxonomies différentes. Par exemple: événements de décembre (mois) qui se déroulent également dans le Montana (lieu). Il semble juste choisir l'un ou l'autre.

Autres informations: Lorsque vous utilisez la boucle Wordpress standard, et non la boucle personnalisée ci-dessous, il n'y a pas de problème avec plusieurs requêtes avec ce CPT et les taxonomies, mais bien sûr, il affiche tous les événements qui se sont déjà produits, y compris ceux du passé.

En outre, ceci est mon premier wp_query, alors j'espère que c'est quelque chose d'évident.

Fichier: (archives-events.php)

<?php 
$today = date('Ymd');       
$my_query = new WP_Query( array(
    'post_type' => 'events',
        'tax_query' => array(
        'relation' => 'OR',
          array(
            'taxonomy' => 'location',
            'terms' => $term,
          ),
             array(
            'taxonomy' => 'month',
            'terms' => $term,
          ),
          array(
            'taxonomy' => 'type',
            'terms' => $term,
          )), 
    'posts_per_page' => 10,
    'meta_compare' => '>',
        'meta_value' => $today,
    'orderby' => 'meta_value', 
    'meta_key' => 'start_date',
    'order' => 'ASC',
    'paged'=> $paged, 
)); ?>

<?php if ( $my_query->have_posts() ) : while ($my_query->have_posts() ) : $my_query->the_post();?>

<!-- OUTPUT OF QUERY -->

<?php endwhile; 
wp_reset_postdata();
endif; ?>
1
Chip Strong

Voici une fonction pour faire une requête avec plusieurs taxonomies:

function posts_search ($post_type,$taxonomies) { // $taxonomies should be an array ('taxonomy'=>'term', 'taxonomy2'=>'term2')
    foreach ($taxonomies as $key=>$value) {
        $args=array('post_type'=>$post_type,'post__in'=>$ids,$key=>$value);
        unset($ids); $ids=array();
        foreach($posts=get_posts($args) as $post) { $ids[]=$post->ID; }
        if (empty($ids)) return false;
    }
    return $posts;
}

Et voici un exemple sur la façon dont je l'ai utilisé dans un projet précédent:

$posts = posts_search ('produtos',array('prod-categoria'=>'blocos','prod-cols'=>'7-c')); 
if($posts) { 
    foreach($posts as $post) { 
        // show infos from the post... 
    } 
}

La produtos est le type de message personnalisé sur lequel je fais la recherche, prod-categoria et prod-cols sont deux taxonomies personnalisées et blocos et 7-c sont deux termes des taxonomies personnalisées précédentes.

J'espère que cela pourra aider.

OBS1; la fonction n'est pas de moi, mais probablement d'un ancien post ici. OBS2; c'était fonctionnel sur une installation 3.1.2.

1
kevin