我正在尝试从名为social,和的自定义帖子类型中获取所有帖子的列表,这些帖子属于社交类别中的所有正常帖子。我目前正在使用以下内容:
$posts = get_posts(
array(
'post_type' => array('social', 'post'),
'category_name' => 'social',
'post_status' => 'publish'
)
);
这似乎只是回归社交类别中的帖子,而不是社交帖子类型。无论如何都要返回post_types?
答案 0 :(得分:0)
生成的查询要求所有条件都为真:post_type
为social
或post
并且category_name
为social
AND {{1成为post_status
。
一个简单的解决方案是使用publish
代替:
WP_Query
然后,您可以使用$query = new WP_Query(array(
'post_type' => array('social', 'post'),
'category_name' => 'social',
'post_status' => 'publish'
));
$posts = $query->posts;
过滤器修改查询的posts_where
部分:
where
我将跳过字符串操作部分,因为那里没有任何具体内容。无论如何,add_filter( 'posts_where', 'my_posts_where', 10, 2 );
function my_posts_where( $where, $query ) {
...modify $where...
return $where;
}
看起来像这样(用我的WordPress安装测试):
$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
对象中添加一些指示符,以在过滤器中标识此特定查询。