Comment interroger un type de publication personnalisé avec une taxonomie personnalisée?

26

Pour une raison quelconque, je trouve difficile de saisir des messages en utilisant une taxonomie personnalisée ... quelqu'un peut-il démêler ma stupidité?

 $args = array(
    'post_type' => 'adverts',
    'advert_tag' => 'politics' // Doesn't seem to work.
  );

query_posts($args); 

while ( have_posts() ) : the_post();
 //Show Posts
endwhile;

Déclaration de taxonomie:

add_action( 'init', 'add_custom_taxonomy', 0 );
function add_custom_taxonomy() {
register_taxonomy('advert_tag', 'Adverts', array(
  'hierarchical' => true,
  'labels' => array(
    'name' => _x( 'Advert Tags', 'taxonomy general name' ),
    'singular_name' => _x( 'Advert Tag', 'taxonomy singular name' ),
    'search_items' =>  __( 'Search Advert Tags' ),
    'all_items' => __( 'All Advert Tags' ),
    'parent_item' => __( 'Parent Advert Tag' ),
    'parent_item_colon' => __( 'Parent Advert Tag:' ),
    'edit_item' => __( 'Edit Advert Tag' ),
    'update_item' => __( 'Update Advert Tag' ),
    'add_new_item' => __( 'Add New Advert Tag' ),
    'new_item_name' => __( 'New Advert Tag Name' ),
    'menu_name' => __( 'Advert Tags' ),
  ),
  'rewrite' => array(
    'slug' => 'advert-tags',
    'with_front' => false,
    'hierarchical' => true
  ),
));
  }

Déclaration de type de poste personnalisé:

  add_action( 'init', 'create_post_type' );
  function create_post_type() {
    register_post_type( 'Adverts',
    array(
        'labels' => array(
            'name' => __( 'Adverts' ),
            'singular_name' => __( 'Advert'),
            'add_new' => __( 'Add New' ),
            'add_new_item' => __( 'Add a New Advert' ),
            'edit' => __( 'Edit' ),
            'edit_item' => __( 'Edit Advert' ),
            'new_item' => __( 'New Advert' ),
            'view' => __( 'View' ),
            'view_item' => __( 'View Advert' ),
            'search_items' => __( 'Search Adverts' ),
            'not_found' => __( 'No Adverts found' ),
            'not_found_in_trash' => __( 'No Adverts found in Trash' ),
            ),
        'supports' => array(
                'title',
                'thumbnail',
            ),
        'has_archive' => true,
        'menu_position' => 10,
        'public' => true,
        'rewrite' => array( 'slug' => 'adverts' ),
        'taxonomies' => array('advert_tag')
    )
);

}

Stephen
la source

Réponses:

37

Les premiers de tous n'utilisent query_posts()jamais , lisez plus à ce sujet ici: Quand devriez-vous utiliser WP_Query vs query_posts () vs get_posts ()? .

Vous devez utiliser WP_Querypour récupérer les messages dont vous avez besoin. Lisez la documentation correspondante. Dans votre cas, la requête pourrait ressembler à ceci:

$the_query = new WP_Query( array(
    'post_type' => 'Adverts',
    'tax_query' => array(
        array (
            'taxonomy' => 'advert_tag',
            'field' => 'slug',
            'terms' => 'politics',
        )
    ),
) );

while ( $the_query->have_posts() ) :
    $the_query->the_post();
    // Show Posts ...
endwhile;

/* Restore original Post Data 
 * NB: Because we are using new WP_Query we aren't stomping on the 
 * original $wp_query and it does not need to be reset.
*/
wp_reset_postdata();
Eugene Manuilov
la source
2
Je viens de remarquer qu'il semble extraire tous les messages avec le type de message personnalisé "Annonces". Cependant, cela semble faire le travail: $ the_query = new WP_Query (array ('post_type' => 'Adverts', 'advert_tag' => 'policy'));
Stephen
@Stephen {tax} est obsolète depuis la version 3.1 en faveur de {tax_query} et {tax_query} a été introduite. cela fonctionne toujours mais nous ne devons pas utiliser les fonctions obsolètes. tax_query est utilisé avec un tableau de requêtes de taxonomie. Je travaillais sur le type de publication personnalisée FAQ et cela a fonctionné pour moi à peu près de la même manière que l'argument de limace de taxonomie {tax} dans WP_Query.
Aamer Shahzad
16

j'utilise cette requête pour récupérer des messages personnalisés (FAQs Posts) avec sa taxonomie personnalisée (faq_category). puisque le paramètre {taxonomy} dans WP_Query args est obsolète depuis la v.3.1 et introduit {tax_query}. ci-dessous est le code qui fonctionne parfaitement.

$query = new WP_Query( array(
    'post_type' => 'faqs',          // name of post type.
    'tax_query' => array(
        array(
            'taxonomy' => 'faq_category',   // taxonomy name
            'field' => 'term_id',           // term_id, slug or name
            'terms' => 48,                  // term id, term slug or term name
        )
    )
) );

while ( $query->have_posts() ) : $query->the_post();
    // do stuff here....
endwhile;

/**
 * reset the orignal query
 * we should use this to reset wp_query
 */
wp_reset_query();
Aamer Shahzad
la source
C'est la bonne réponse - la réponse acceptée ne sera pas filtrée par taxonomie car tax_query nécessite un tableau de tableaux. Cette méthode imbriquée est essentielle pour que cela fonctionne. Merci pour votre réponse)
Tom Dyer
oui vous avez raison, bienvenue Tom Dyer
Aamer Shahzad
Oui, celui-ci m'a également aidé à faire fonctionner le modèle de taxonomies. Merci!
user3135691
Hé @AamerShahzad J'ai exactement la même question et j'ai utilisé votre réponse mais la page ne tire aucun message. Pouvez-vous m'aider ici? stackoverflow.com/questions/55783769/…
Desi
-1

Cette réponse n'est plus valide maintenant, car wordpress change leurs informations de paramètres de taxonomie. veuillez utiliser de cette façon. Ça va marcher. Ça marche pour moi. "tax_query" remplace par "tax". espérons que cela fonctionnera.

$the_query = new WP_Query( array(
    'post_type' => 'Adverts',
    'tax' => array(
        array (
            'taxonomy' => 'advert_tag',
            'field' => 'slug',
            'terms' => 'politics',
        )
    ),
) );

while ( $the_query->have_posts() ) :
    $the_query->the_post();
    // Show Posts ...
endwhile;

/* Restore original Post Data 
 * NB: Because we are using new WP_Query we aren't stomping on the 
 * original $wp_query and it does not need to be reset.
*/
wp_reset_postdata();
mamunuzaman
la source
C'est exactement le contraire - taxc'était l'ancienne méthode, tax_queryc'est la méthode actuelle (v3.1 +).
WebElaine
Eh bien, je travaille v4.5 et cela fonctionne avec moi
mamunuzaman
WP est célèbre pour sa compatibilité ascendante. L'ancienne méthode fonctionne toujours, mais elle est obsolète, elle peut donc éventuellement être supprimée et il est plus sûr d'utiliser la nouvelle méthode.
WebElaine