Question

( Note Modérateurs : était à l'origine intitulé "Comment get_posts d'un type de poste personnalisé qui est en deux taxonomies personnalisées" )

J'ai un type de poste personnalisé qui a deux taxonomies qui sont séparés, l'un appelé "Type de projet" et un appelé "Package" . Je dois obtenir une liste de projets qui sont de "Type de projet" A et "Package" A. J'ai essayé en utilisant le code suivant:

$args = array(
  'post_type' => 'portfolio', 
  'numberposts' => -1, 
  'project_type' => 'A', 
  'package' => 'A'
); 
$my_posts = get_posts($args);  

Mais cela devient tous les postes qui sont sur Type de projet A OU Forfait A.

Est-il possible de dire à get_posts() que je veux retourner uniquement les postes qui sont dans DEUX taxonomies?

Autres conseils

Salut @shaun :

@Rarst est juste en ce sens qu'ils sont ajouter cette fonctionnalité à WordPress v3.1 , mais il ne sera pas là pendant un certain temps et je suis sûr que vous en avez besoin maintenant. Vous pouvez essayer de saisir le code qu'ils travaillent sur et essayer de le faire fonctionner , vous pouvez utiliser le plugin à la fois @Rarst et @somatic mention, ou vous pouvez simplement inclure le code dont vous avez besoin dans votre thème, ci-dessous.

Le code suivant est un crochet posts_where pour ajouter une variable de requête tax_terms avec une valeur du format (c.-à-deux points-virgules) où les valeurs sont terme limaces :

"{$varname1}:{$value1},{$varname2}:{$value2},...{$varnameN}:{$valueN}"

Ceci est un .php autonome, vous pouvez tomber dans la racine de votre site Web pour le tester avant de tirer l'appel add_action et la fonction tax_terms_where() dans le fichier functions.php de votre thème (ou dans le fichier .php d'un de vos plugins.)

<?php
/*
* Adds "tax_terms" to WP_Query()
*
* See: http://lists.automattic.com/pipermail/wp-hackers/2010-October/035258.html
* See: http://wordpress.stackexchange.com/questions/2255/
*
*/

  header('Content-Type:text/plain');
  include "wp-load.php";
  add_action('posts_where','tax_terms_where',10,2);

  $result = new WP_Query('post_type=portfolio&tax_terms=project_type:A,package:A');
  foreach($result->posts as $post) {
    echo "{$post->post_title}\n";
  }

function tax_terms_where($where,$wp_query) {
  if (isset($wp_query->query)) {
    $query = $wp_query->query;
    if (is_string($query))
      parse_str($query,$query);
    if (is_array($query) && isset($query['tax_terms'])) {
      global $wpdb;
      $tax_terms = explode(',',$query['tax_terms']);
      foreach($tax_terms as $tax_term) {
        list($taxonomy,$term) = explode(':',$tax_term);
        $sql = <<<SQL
AND $wpdb->posts.ID IN (
  SELECT tr.object_id
  FROM $wpdb->term_relationships AS tr
  INNER JOIN $wpdb->term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
  INNER JOIN $wpdb->terms AS t ON tt.term_id = t.term_id
  WHERE tt.taxonomy='%s' AND t.slug='%s'
)
SQL;
        $where .= $wpdb->prepare($sql,$taxonomy,$term);
      }
    }
  }
  return $where;
}

Si ce n'est pas exactement ce dont vous avez besoin parce que, par exemple, vous préférez faire correspondre le $term->term_id au lieu de chercher le $term->slug alors le code ne doit pas être trop difficile à modifier pour vos besoins, vous êtes à l'aise en supposant avec SQL et .php.

Vieux Q, mais est apparemment en voici donc l'état actuel -. Requêtes de taxonomie se sont nettement améliorées en 3.1 et plus depuis

Ces jours-ci, il sera traitée facilement avec requête fiscale en utilisant la relation AND, par exemple du Codex:

'tax_query' => array(
    'relation' => 'AND',
    array(
        'taxonomy' => 'movie_genre',
        'field'    => 'slug',
        'terms'    => array( 'action', 'comedy' ),
    ),
    array(
        'taxonomy' => 'actor',
        'field'    => 'term_id',
        'terms'    => array( 103, 115, 206 ),
        'operator' => 'NOT IN',
    ),
),

Voir rel="nofollow"> taxonomie pour une documentation complète.


Usual disclaimer - Je ne l'avais pas sali avec des trucs sur mesure moi-même jusqu'à présent.

Je pense que les requêtes de taxonomie complexes ne sont pas mises en œuvre dans le noyau WP (encore). Essayez Interrogation multiples taxonomies plugin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top