Jak zapytać o niestandardowy typ postu z niestandardową taksonomią?


26

Z jakiegoś powodu uważam, że trudno jest zdobyć dowolne posty za pomocą niestandardowej taksonomii ... czy ktoś może rozwikłać moją głupotę?

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

query_posts($args); 

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

Deklaracja taksonomiczna:

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
  ),
));
  }

Niestandardowa deklaracja typu przesyłki:

  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')
    )
);

}

Odpowiedzi:


37

Wiele firm nigdy nie korzystaquery_posts() , przeczytaj więcej na ten temat tutaj: Kiedy powinieneś używać WP_Query vs query_posts () vs get_posts ()? .

Musisz użyć, WP_Queryaby pobrać posty, których potrzebujesz. Przeczytaj dokumentację . W twoim przypadku zapytanie może wyglądać tak:

$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();

2
Właśnie zauważyłem, że wydaje się, że ciągnie wszystkie posty z niestandardowym typem ogłoszenia „Reklamy”. Jednak wydaje się, że spełnia to zadanie: $ the_query = new WP_Query (array ('post_type' => 'Adverts', 'advert_tag' => 'polityka'));
Stephen

@ Stephen {tax} został wycofany, ponieważ wprowadzono wersję 3.1 na rzecz {tax_query} i {tax_query}. to nadal działa, ale nie powinniśmy używać przestarzałych funkcji. tax_query jest używany z szeregiem kwerend taksonomicznych. pracowałem nad typem niestandardowych postów FAQ i działało to dla mnie w ten sam sposób, co argument argumentu taksonomicznego {tax} w WP_Query.
Aamer Shahzad,

16

Używam tego zapytania, aby pobrać niestandardowe posty (posty często zadawane pytania) z niestandardową taksonomią (faq_category). ponieważ parametr {taksonomia} w argumentach WP_Query był przestarzały od wersji 3.1 i wprowadził {tax_query}. poniżej znajduje się kod, który działa idealnie.

$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();

To jest poprawna odpowiedź - zaakceptowana odpowiedź nie będzie filtrować według taksonomii, ponieważ tax_query wymaga tablicy tablic. Ta metoda zagnieżdżona jest niezbędna, aby to zadziałało. Dziękuję za odpowiedź)
Tom Dyer

tak, masz rację, witaj Tom Dyer
Aamer Shahzad

Tak, ten pomógł mi również uruchomić szablon taksonomii. Dziękuję Ci!
user3135691

Hej @AamerShahzad Mam dokładnie to samo pytanie i użyłem twojej odpowiedzi, ale strona nie ściąga żadnych postów. Czy możesz mi pomóc tutaj? stackoverflow.com/questions/55783769/…
Desi

-1

Ta odpowiedź nie jest już aktualna, ponieważ wordpress zmienia informacje o parametrach taksonomii. skorzystaj w ten sposób. To będzie działać. Mi to pasuje. „tax_query” zamienia się na „podatek”. mam nadzieję, że to zadziała.

$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();

Jest dokładnie odwrotnie - taxbył stary sposób, tax_queryjest obecny (v3.1 +) sposób.
WebElaine,

Cóż, pracuję w wersji 4.5 i działa ze mną
mamunuzaman

WP słynie z kompatybilności wstecznej. Stary sposób nadal działa, ale został przestarzały, więc można go w końcu usunąć i bezpieczniej jest korzystać z nowszej metody.
WebElaine
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.