GET_POST仅发布来自特定父母的孩子

时间:2011-11-22 作者:jam

我有ID为1、2、3、4的父帖子(自定义帖子类型hierarch=true)。

ID为2和4的父帖子具有子页面。

我只需要检索帖子2和4及其所有子页面。

像这样的

$argsch = array(\'orderby\' => \'date\',\'order\' => \'DESC\',\'post_type\' => \'products\', \'include\' => \'2, 4\');
$childs = get_posts($argsch);
我如何编辑它以返回包含id的子页面?

3 个回复
最合适的回答,由SO网友:marcochiesi 整理而成

您有两种选择:

多次调用get\\u posts:一次用于父页面,使用post__in => array(2,4), 每个父级的子页有两个post_parent => 2post_parent => 4 最后将所有结果合并到一个数组中。

直接编写SQL查询并使用$wpdb->get_results. 看见this article 例如。在您的情况下,它将类似于以下(未测试)代码:

$query_sql = "
    SELECT *
    FROM $wpdb->posts
    WHERE post_type = \'products\'
    AND (ID IN (2,4) OR post_parent IN (2,4))
    ORDER BY post_date DESC
";
$query_result = $wpdb->get_results($query_sql, OBJECT);

SO网友:Tom J Nowell

$args = array(\'orderby\' => \'date\',\'order\' => \'DESC\',\'post_type\' => \'products\', \'include\' => \'2, 4\');

// get the 2 and 4 posts
$children = get_posts($args);

// get the children of 2, and merge arrays
$children = array_merge($children,get_posts(array(\'orderby\' => \'date\',\'order\' => \'DESC\',\'post_type\' => \'products\',\'post_parent\'=>2)));

// get the children of 4, and merge arrays
$children = array_merge($children,get_posts(array(\'orderby\' => \'date\',\'order\' => \'DESC\',\'post_type\' => \'products\',\'post_parent\'=>4)));

foreach($children as $child){
    // etc
}
尽管如果您可以在自定义分类法中标记它们,或者以其他方式识别它们,这样您只需要查找一件事,而不是三件事,那么会更容易/更快。

e、 g.如果我们有一个自定义分类法“突出显示的产品”,我们可能会:

$children = get_posts(\'post_type\' => \'products\', \'orderby\' => \'date\',\'order\' => \'DESC\',\'highlighted_products\' => \'example_page\');
foreach($children as $child){
    // etc
}
这将更加灵活,更不容易出错(ID 2和4可能会更改!不要硬编码),而且执行速度更快,没有原始SQL或多个查询。更不用说,你现在在后端有一个很好的用户友好界面,你只需标记一个产品帖子,它就会出现在正确的位置

SO网友:T.Todua

$children = get_posts(\'post_parent=SLUG_OF_PARENT_POST&post_status=publish\');
foreach($children as $child)
{
echo \'<br/>ID:\'.$child->ID;
}
您可以使用其他属性(即。$child->post_content)...如果需要定义post\\U类型,请也添加此参数:&post_type=POST_TYPE_NAME

结束

相关推荐