Comment interroger par format de publication dans WordPress 3.1

10

J'essaie de rechercher toutes les publications avec un format de publication "devis". J'ai ajouté les formats de publication à mes fonctions.php avec

add_theme_support( 'post-formats', array( 'image', 'video', 'gallery', 'quote' ) );

J'ai sélectionné «devis» comme format pour la publication dans l'admin. Le dernier exemple sous Taxonomy_Parameters montre comment afficher les publications qui ont le format 'quote' mais quand je l'exécute dans mon thème, aucune publication n'est retournée. Voici le code:

$args = array(
  'tax_query' => array(
    array(
      'taxonomy' => 'post-format',
      'field' => 'slug',
      'terms' => 'post-format-quote'
    )
  )
);
query_posts( $args );

Quand je recherche juste tous les messages et les place

echo get_post_format();

dans la boucle, il renvoie le mot «quote» sur le front-end. De plus, lorsque je var_dump () la requête, je ne vois rien dans le tableau sur le format de publication.

Est-ce que quelqu'un sait s'il est possible d'interroger par format de publication? Si c'est le cas, comment?

EDIT - Voir 5 commentaires sous la réponse de Bainternet: Il s'agit du code trouvé sur index.php du thème vingtten d'une nouvelle installation essayant de renvoyer des guillemets de type format. Je renvoie «non» au lieu de «devis». Pouvez-vous voir quelque chose que je devrais changer.

get_header(); ?>
<div id="container">
  <div id="content" role="main">
    <?php $args = array(
      'tax_query' => array(
        array(
          'taxonomy' => 'post-format',
          'field' => 'slug',
          'terms' => array('quote')
        )
      )
    );
    query_posts( $args );
    if ( have_posts() ) : while ( have_posts() ) : the_post();
      echo get_post_format();
    endwhile; else:
      echo 'no';
    endif;
    wp_reset_query();      
    ?>
  </div><!-- #content -->
</div><!-- #container -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>

EDIT 2 - Il semble que le Codex WordPress a maintenant changé et la partie sur les paramètres de taxonomie ne se trouve que dans le cache de Google.

MODIFICATION 3 - CODE DE TRAVAIL FINAL

$args = array(
  'tax_query' => array(
    array(
      'taxonomy' => 'post_format',
      'field' => 'slug',
      'terms' => 'post-format-quote'
    )
  )
);
query_posts( $args );

Le vingt-dix montage du premier montage sera ...

get_header(); ?>
<div id="container">
  <div id="content" role="main">
    <?php $args = array(
      'tax_query' => array(
        array(
          'taxonomy' => 'post_format',
          'field'    => 'slug',
          'terms'    => 'post-format-quote'
        )
      )
    );
    query_posts( $args );
    if ( have_posts() ) : while ( have_posts() ) : the_post();
      the_title();
      echo get_post_format();
      echo '<br />';
    endwhile; else:
      echo 'no';
    endif;
    wp_reset_query();      
    ?>
  </div><!-- #content -->
</div><!-- #container -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
PNMG
la source

Réponses:

7

Ce code est incorrect! Tu as

'taxonomy' => 'post-format'

Mais cela doit vraiment être:

'taxonomy' => 'post_format'

Sans le soulignement, la requête sera invalide. Je viens de tester cela sur mon installation WordPress 3.1 après m'être arraché les cheveux pendant des heures.

J'espère que ça t'as aidé!!

Jared White
la source
Merci beaucoup d'avoir compris cela. Je pourrais jurer que j'ai copié le code original directement à partir de la page du Codex. (Peut-être que c'était mal là aussi à un moment donné.) Cela fonctionne maintenant. En plus de le changer en post_format, je devais également changer 'terms' => 'quote' en 'terms' => 'post-format-quote'. Pour toute autre personne intéressée, veuillez consulter l'édition 3 du message d'origine pour le code final.
PNMG
Bien sûr, content d'avoir pu aider. :)
Jared White
2

en tax_query"termes" accepte un tableau, vous devez donc mettre post-format-quoteun tableau comme celui-ci:

$args = array(
  'tax_query' => array(
    array(
      'taxonomy' => 'post-format',
      'field' => 'slug',
      'terms' => array('post-format-quote')
    )
  )
);
query_posts( $args );
Bainternet
la source
Quelqu'un a-t-il essayé cela et l'a-t-il fait fonctionner? J'ai ajouté la partie tableau et elle n'a toujours rien retourné. Le post-format-quote est-il le bon slug à mettre dans le tableau?
PNMG
non, ce n'est pas que vous devez mettre le format de message lui-même comme "devis" et non post-format-devis
Bainternet
Voulez-vous dire que je devrais mettre «terms» => array («quote») puisque c'est ce que j'ai défini quote dans la fonction add_theme_support? J'ai essayé ça aussi. Toujours pas de chance.
PNMG
bien 'terms' => array ('quote') fonctionne à partir de moi, essayez de faire écho au format du message avec 'echo get_post_format ();' et voyez ce que vous obtenez
Bainternet
Ok, donc quand je fais écho, j'obtiens 'quote'. Dans un moment de désespoir, j'ai désactivé tous les plugins et suis revenu au thème vingtten par défaut, et créé 3 messages de test, l'un avec un format de citation. J'ai mis à jour le fichier functions.php pour ajouter une citation à l'appel add_theme_support et mis à jour index.php pour utiliser le code suivant: [voir la modification au bas du message d'origine]
PNMG