2016-05-29 5 views
0

私はのすべてのの投稿を、social、という名前のカスタム投稿タイプの投稿から取得しようとしています。私は現在、以下を使用しています:特定のカテゴリのすべてのカスタム投稿タイプの投稿と通常の投稿のリストを取得する

$posts = get_posts(
    array(
    'post_type' => array('social', 'post'), 
    'category_name' => 'social', 
    'post_status' => 'publish' 
) 
); 

これはソーシャルポストタイプではなく、ソーシャルカテゴリ内の投稿を返しているようです。とにかく両方のpost_typeを返しますか?

答えて

0

生成されたクエリは、すべての条件が真であることを期待:post_typepublishするsocialpost_statusするsocialまたはpostcategory_nameのいずれかであることを。

一つの簡単な解決策ではなくWP_Queryを使用することです:

$query = new WP_Query(array(
    'post_type' => array('social', 'post'), 
    'category_name' => 'social', 
    'post_status' => 'publish' 
)); 
$posts = $query->posts; 

を次に、クエリのwhere一部を変更するposts_whereフィルタを使用することがあります。

add_filter('posts_where', 'my_posts_where', 10, 2); 
function my_posts_where($where, $query) { 
    ...modify $where... 
    return $where; 
} 

私は、文字列をスキップしますそこに特有のものはないからです。

"AND (wp_term_relationships.term_taxonomy_id IN (<number>)) 
AND wp_posts.post_type IN ('social', 'post') AND 
((wp_posts.post_status = 'publish'))" 

あなたはこのようなものに変換する必要があります:

"AND (((wp_term_relationships.term_taxonomy_id IN (<number>) 
AND wp_posts.post_type = 'post') OR (wp_posts.post_type = 'social')) 
AND (wp_posts.post_status = 'publish'))" 

最後に、あなたはmy_posts_whereがないことを確認する必要がありますとにかく、$whereは、この(私のWordPressのインストールをテストした)のようになります。他のクエリを壊さないでください。私は$queryオブジェクトにあるインジケータを追加して、フィルタ内のこの特定のクエリを識別することができます。

+0

ちょうど私が必要なもの!ありがとう! – jhummel

関連する問題