Làm cách nào để truy vấn loại bài đăng tùy chỉnh với phân loại tùy chỉnh?


26

Vì một số lý do, tôi thấy đó là một cuộc đấu tranh để lấy bất kỳ bài đăng nào bằng cách sử dụng phân loại tùy chỉnh ... bất cứ ai cũng có thể làm sáng tỏ sự ngu ngốc của tôi?

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

query_posts($args); 

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

Tuyên bố phân loại:

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

Khai báo loại bài tùy chỉnh:

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

}

Câu trả lời:


37

Linh hồn của tất cả không sử dụng query_posts()bao giờ , đọc thêm về nó ở đây: Khi nào bạn nên sử dụng WP_Query vs query_posts () so với get_posts ()? .

Bạn phải sử dụng WP_Queryđể tìm nạp bài viết những gì bạn cần. Đọc tài liệu cho nó. Trong trường hợp của bạn, truy vấn có thể như thế này:

$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
Chỉ cần lưu ý rằng nó dường như kéo tất cả các bài đăng với loại bài đăng tùy chỉnh 'Quảng cáo'. Tuy nhiên, điều này dường như thực hiện công việc: $ the_query = new WP_Query (mảng ('post_type' => 'Quảng cáo', 'advert_tag' => 'chính trị'));
Stephen

@Stephen {tax} không được dùng nữa kể từ phiên bản 3.1 có lợi cho {tax_query} và {tax_query} đã được giới thiệu. Điều này vẫn hoạt động nhưng chúng ta không nên sử dụng các hàm không dùng nữa. tax_query được sử dụng với một loạt các truy vấn phân loại. tôi đã làm việc với loại Câu hỏi thường gặp Câu hỏi thường gặp và nó hoạt động với tôi khá giống với đối số sên phân loại {tax} trong WP_Query.
Aamer Shahzad

16

tôi đang sử dụng truy vấn này để tìm nạp các bài đăng tùy chỉnh (Câu hỏi thường gặp) với phân loại tùy chỉnh (faq_carget). vì tham số {taxonomy} trong WP_Query args không được dùng nữa kể từ v.3.1 và được giới thiệu {tax_query}. Dưới đây là mã hoạt động hoàn hảo.

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

Đây là câu trả lời đúng - câu trả lời được chấp nhận sẽ không lọc theo phân loại vì tax_query yêu cầu một mảng các mảng. Phương pháp lồng nhau này là điều cần thiết để làm cho nó hoạt động. Cảm ơn câu trả lời của bạn)
Tom Dyer

vâng bạn đúng, chào mừng Tom Dyer
Aamer Shahzad

Vâng, điều này cũng giúp tôi có được mẫu phân loại để làm việc. Cảm ơn bạn!
dùng3135691

Xin chào @AamerShahzad Tôi có cùng một câu hỏi và tôi đã sử dụng câu trả lời của bạn nhưng trang này không có bài đăng nào. Bạn có thể giúp tôi ra ở đây? stackoverflow.com/questions/55783769/
Mạnh

-1

Câu trả lời này bây giờ không còn giá trị nữa vì wordpress thay đổi thông tin tham số phân loại của chúng. vui lòng sử dụng cách này Nó sẽ làm việc. Nó làm việc cho tôi. "tax_query" thay thế bằng "thuế". hy vọng nó sẽ làm việc

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

Đó là cách hoàn toàn ngược lại - taxlà cách cũ, tax_querylà cách hiện tại (v3.1 +).
WebElaine

Vâng, tôi đang làm việc v4.5 và nó hoạt động với tôi
mamunuzaman

WP nổi tiếng vì tương thích ngược. Cách cũ vẫn hoạt động, nhưng nó không được dùng nữa, vì vậy cuối cùng có thể được gỡ bỏ và sử dụng phương pháp mới hơn sẽ an toàn hơn.
WebElaine
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.