获取特定类别的所有自定义帖子类型帖子和常规帖子的列表

时间:2016-05-29 16:13:53

标签: wordpress

我正在尝试从名为social,的自定义帖子类型中获取所有帖子的列表,这些帖子属于社交类别中的所有正常帖子。我目前正在使用以下内容:

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

这似乎只是回归社交类别中的帖子,而不是社交帖子类型。无论如何都要返回post_types?

1 个答案:

答案 0 :(得分:0)

生成的查询要求所有条件都为真:post_typesocialpost并且category_namesocial 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对象中添加一些指示符,以在过滤器中标识此特定查询。