맞춤 분류 체계를 사용하여 맞춤 게시물 유형을 어떻게 쿼리합니까?


26

어떤 이유로 든 사용자 정의 분류법을 사용하여 게시물을 가져 오는 것이 어려움을 겪고 있습니다 ... 누구나 내 바보를 풀 수 있습니까?

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

query_posts($args); 

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

분류 선언 :

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

맞춤 게시물 유형 선언 :

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

}

답변:


37

모든 전나무는 이제까지 사용하지 않습니다.query_posts() 자세한 내용은 여기를 참조하십시오. WP_Query vs query_posts () vs get_posts ()는 언제 사용해야합니까? .

WP_Query필요한 게시물을 가져 오는 데 사용해야 합니다. 이에 대한 설명서 를 읽으 십시오. 귀하의 경우 쿼리는 다음과 같습니다.

$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
맞춤 게시물 유형이 '광고'인 모든 게시물을 가져 오는 것 같습니다. 그러나 이것은 일을하는 것처럼 보입니다 : $ the_query = new WP_Query (array ( 'post_type'=> 'Adverts', 'advert_tag'=> 'politics'));
Stephen

{tax_query}에 찬성하여 버전 3.1부터 @Stephen {tax}가 사용되지 않으며 {tax_query}가 도입되었습니다. 이것은 여전히 ​​작동하지만 더 이상 사용되지 않는 기능을 사용해서는 안됩니다. tax_query는 일련의 분류법 쿼리와 함께 사용됩니다. 나는 FAQ Custom Post type에서 일하고 있었고 WP_Query의 {tax} taxonomy slug argument와 거의 같은 방식으로 나를 위해 일했다.
Aamer Shahzad

16

이 쿼리를 사용하여 사용자 지정 분류법 (faq_category)으로 사용자 지정 게시물 (FAQ 게시물)을 가져옵니다. WP_Query args의 {taxonomy} 매개 변수는 v.3.1 이후로 더 이상 사용되지 않으며 {tax_query}를 도입했습니다. 아래는 완벽하게 작동하는 코드입니다.

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

이것은 정답입니다. tax_query에는 배열 배열이 필요하므로 허용 된 답은 분류법으로 필터링되지 않습니다. 이 중첩 된 메소드는 이것이 작동하도록하는 데 필수적입니다. 답변 주셔서 감사합니다)
Tom Dyer

네 그렇습니다, 환영합니다 Tom Dyer
Aamer Shahzad

예, 이것도 분류법 템플릿을 작동시키는 데 도움이되었습니다. 고맙습니다!
user3135691

안녕하세요 @AamerShahzad 나는 똑같은 질문이 있고 귀하의 답변을 사용했지만 페이지가 게시물을 가져 오지 않았습니다. 여기서 도와 줄 수 있습니까? stackoverflow.com/questions/55783769/…
Desi

-1

워드 프레스가 분류 매개 변수 정보를 변경하기 때문에이 답변은 더 이상 유효하지 않습니다. 이 방법으로 사용하십시오. 작동합니다. 그것은 나를 위해 작동합니다. "tax_query"는 "tax"로 바뀝니다. 그것이 효과가 있기를 바랍니다.

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

그것은 정반대입니다- tax옛날 방식이었습니다 tax_query, 현재 (v3.1 +) 방식입니다.
WebElaine

글쎄, 나는 v4.5를 작업하고 나와 함께 작동합니다
mamunuzaman

WP는 이전 버전과 호환되는 것으로 유명합니다. 이전 방법은 여전히 ​​작동하지만 더 이상 사용되지 않으므로 결국 제거되어 더 새로운 방법을 사용하는 것이 더 안전합니다.
WebElaine
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.