按元键排序的所有页面(包括子项)的查询

时间:2015-04-02 作者:Umo

我将修改后的日期保存为meta_value 在每个页面上,我想在插件屏幕的列表中按日期显示它们。

如何在查询结果中同时包含子页面(可以是4-6级深度),以及meta_value? 这是因为get_pages 无法按meta_value 根据我的理解,我似乎不能在任何其他查询中包含子页面,例如wp_queryget_posts().

这是我用的get_pages 但它不起作用:

$pages = get_pages( array(
    \'post_type\'   => \'page\',
    \'meta_key\'    => \'review_date\',
    \'meta_key\'    => \'reviewed_by_user_id\',
    \'sort_column\' => \'review_date\',
    \'sort_order\'  => \'asc\'
) );

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

这就是我最后做的,因为我找不到其他方法

//Fetch all pages
$pages = get_pages( array(
        \'post_type\' => \'page\',
        \'meta_key\' => \'review_date\',
        //\'meta_key\' => \'reviewed_by_user_id\',
        \'sort_column\' => \'review_date\',
        \'sort_order\' => \'asc\'
        ));

//Fetch metadata for each page
$ordered_pages = array();
foreach ($pages as $page)
{
    $metadata = get_metadata(\'post\', $page->ID);
    $user = $metadata[\'reviewed_by_user_id\'][0];
    $date = $metadata[\'review_date\'][0];

    array_push($ordered_pages, array(
        \'ID\' => $page->ID,
        \'title\' => $page->post_title,
        \'review_date\' => $date,
        \'reviewed_by_user_id\' => $user,
        \'link\' => get_edit_post_link($page->ID),
        ));
}

//Order the pages 
$orderby_array = array();
foreach ($ordered_pages as $key => $row)
{
    $orderby_array[$key] = $row[$orderby];
}
array_multisort($orderby_array, SORT_DESC, $ordered_pages);
然后像这样在页面中循环

foreach ($ordered_pages as $page)
{
   //Some code
}
这并不漂亮,它使用get\\u metadata调用生成了很多额外的db调用,但由于它在admin中是一个很少查看的页面,所以对我来说没问题。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post