カスタム分類でカスタム投稿タイプをクエリするにはどうすればよいですか?


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必要なものを投稿を取得するには使用する必要があります。ドキュメントを読んでください。あなたの場合、クエリは次のようになります。

$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}は、バージョン3.1以降{tax_query}と{tax_query}が導入されて廃止されました。これでも機能しますが、非推奨の関数を使用しないでください。tax_queryは、分類クエリの配列とともに使用されます。私はFAQカスタム投稿タイプに取り組んでいたが、WP_Queryの{tax}分類法スラッグ引数とほとんど同じように働いた。
アーマーシャーザド

16

このクエリを使用して、カスタム分類(faq_category)でカスタム投稿(FAQ Posts)を取得しています。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は配列の配列を必要とするため、受け入れられた答えは分類法によってフィルタリングされません。このネストされたメソッドは、これを機能させるために不可欠です。あなたの答えてくれてありがとう)
トム・ダイアー

はい、あなたは正しい、
トムダイアー

はい、これは分類法テンプレートを機能させるのにも役立ちました。ありがとうございました!
user3135691

ちょっと@AamerShahzadまったく同じ質問があり、あなたの答えを使用しましたが、ページに投稿がありません。ここで私を助けてもらえますか?stackoverflow.com/questions/55783769/...
デジ

-1

wordpressが分類パラメータ情報を変更するため、この回答は無効になりました。この方法を使用してください。それが動作します。わたしにはできる。「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.