如何根据页面ID数组对查询到的页面进行排序?

时间:2012-11-25 作者:Taurayi

我正在创建一个单页wordpress网站,我需要我的“主页”、“关于”、“公文包”、“服务”和“联系人”页面都出现在头版。我为我的首页创建了以下页面模板:

page-home.php:

<?php get_header(); ?>

        <div id="primary">

            <div id="content">

                <?php 

                    $titles = array(\'home\', \'about\', \'portfolio\', \'services\', \'contact\'); 

                    $ids = array();

                    foreach($titles as $title) {
                        $page = get_page_by_title($title);
                        if($page) {
                            $ids[] = $page->ID;
                        }
                    }

                    global $wp_query;
                    $wp_query = new WP_Query(array(\'post_type\' => \'page\', \'post__in\' => $ids));

                ?>

                <?php while ( have_posts() ) : the_post(); ?>

                    <?php get_template_part( \'content\', \'page\' ); ?>

                <?php endwhile; ?>

            </div><!-- #content -->

        </div><!-- #primary -->

        <?php get_sidebar(); ?>

<?php get_footer(); ?>
我的问题是,查询的页面,$wp_query->posts, 不按页面ID数组排序,$ids, 我用来查询页面的。如何对$wp_query->posts 针对$ids 大堆

这是我的第一个问题wordpress.stackexchange.com 如果我的问题有问题,请告诉我。

2 个回复
SO网友:Chittaranjan

当wordpress提供了一种更好的页面排序方法时,就不需要使用这样的自定义代码menu_order. 您可以在下面看到此选项Page Attributes 页面编辑屏幕右侧的框。您可以根据自己的标准分配订单,然后使用以下代码

<?php
global $wp_query;
$wp_query = new WP_Query(
                    array(
                        \'post_type\' => \'page\',
                        \'orderby\' => \'menu_order\',
                        \'order\' => \'ASC\'
                    )
                );
while ( have_posts() ) : the_post(); ?>

    <?php get_template_part( \'content\', \'page\' ); ?>

<?php endwhile; ?>

Few things to note:

<根据您对数组中页面标题的排序,您应该将第一个元素的顺序指定为最低,将其他元素的顺序指定为较高

SO网友:Taurayi

找到了一些可行的方法:

<?php 

    $titles = array(\'home\', \'about\', \'portfolio\', \'services\', \'contact\'); 

    $ids = array();

    foreach($titles as $title) {
        $page = get_page_by_title($title);
        if($page) {
            $ids[] = $page->ID;
        }
    }

    global $wp_query;
    $wp_query = new WP_Query(array(\'post_type\' => \'page\', \'post__in\' => $ids));

    $sorted_posts = array();
    for($i = 0; $i < count($ids); $i++) {
        for($j = 0; $j < count($wp_query->posts); $j++) {
            if($ids[$i] == $wp_query->posts[$j]->ID) {
                $sorted_posts[] = $wp_query->posts[$j];
            }
        }
    }
    $wp_query->posts = $sorted_posts;

?>
很高兴能接受比这更好的答案,所以我将把这个问题留给其他人一个机会。然而,如果没有任何答案,那么我将把它标记为可接受的答案。

结束

相关推荐

Sort Posts Best Practice

我有一个自定义的帖子类型“属性”。这些属性帖子列在“Let属性”页面上。每个属性帖子都有各种自定义元数据,包括价格和卧室数量。属性最初将按原始wp查询集定义的顺序列出。然而,在页面顶部,我希望有链接,点击后将按价格、添加日期和卧室数量对帖子进行排序。这样做的最佳实践是什么?我见过有人建议将查询字符串添加到URL等,但希望得到一些可靠的建议提前感谢您的帮助约翰