web-dev-qa-db-ja.com

名前と分類用語で投稿を取得する

分類用語と特定の名前/スラッグを含むすべての投稿を取得するにはどうすればよいですか。

私は以下の議論を試みましたが、望んだ結果が得られませんでした。欠けているもの、スラッグと用語を同じクエリで組み合わせる方法は?

array(      
    'name' => '<name of post>',
    'tax_query' => array(
        array(
            'taxonomy' => '<taxonomy>',
            'field' => 'slug',
            'terms' => <slug>,
            'operator' => 'IN'
        )
    ),      
)

SQL:

SELECT  wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = '<slug-name>' AND wp_posts.post_type = '<post type>' AND ((wp_posts.post_status = 'publish'))  ORDER BY wp_posts.post_date DESC

"name"フィールドを削除すると、SQLの分類法の部分は正しく見えます。

array(
    'tax_query' => array(
        array(
            'taxonomy' => '<taxonomy>',
            'field' => 'slug',
            'terms' => <slug>,
            'operator' => 'IN'
        )
    ),      
)

SQL:

SELECT   wp_posts.* FROM wp_posts  INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) WHERE 1=1  AND ( 
  wp_term_relationships.term_taxonomy_id IN (2)
) AND wp_posts.post_type = '<post type>' AND ((wp_posts.post_status = 'publish')) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 5"
1
user634545

投稿スラグがある場合は、その投稿を検索するために追加の分類クエリを必要としないので、その場合は高額な分類クエリを削除するのが理にかなっています。

それ以外の場合は、代わりにpost_name__inパラメータを試すことができます。

[      
    'post_name__in' => [ '<postslug>' ],
    'tax_query' => [
        [
            'taxonomy' => '<taxonomy>',
            'field' => 'slug',
            'terms' => <slug>,
            'operator' => 'IN'
        ]
    ],      
];

それがWordPress 4.4で導入されたのですが、もしあなたがタクソノミークエリの部分も本当に含めたいのであれば;-)

1
birgire