我正在创建一个单页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 如果我的问题有问题,请告诉我。
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;
?>
很高兴能接受比这更好的答案,所以我将把这个问题留给其他人一个机会。然而,如果没有任何答案,那么我将把它标记为可接受的答案。