好吧,我下定决心要想办法做到这一点,我想我已经做到了。我曾希望找到一个更简单的解决方案,避免使用新的WP\\u查询对象,但它在循环的工作方式中根深蒂固。首先,我们有几个效用函数:
// Set post menu order based on our list
function set_include_order(&$query, $list) {
// Map post ID to its order in the list:
$map = array_flip($list);
// Set menu_order according to the list
foreach ($query->posts as &$post) {
if (isset($map[$post->ID])) {
$post->menu_order = $map[$post->ID];
}
}
}
// Sort posts by $post->menu_order.
function menu_order_sort($a, $b) {
if ($a->menu_order == $b->menu_order) {
return 0;
}
return ($a->menu_order < $b->menu_order) ? -1 : 1;
}
这些将允许我们设置
menu_order
属性,然后在此基础上对查询对象中的帖子进行排序。
以下是我们如何查询和排序帖子:
$plist = array(21, 43, 8, 44, 12);
$args = array(
\'post_type\' => \'attachment\',
\'post_status\' => \'any\',
\'post__in\' => $plist
);
// Create a new query
$myquery = new WP_Query($args);
// set the menu_order
set_include_order($myquery, $plist);
// and actually sort the posts in our query
usort($myquery->posts, \'menu_order_sort\');
现在我们有了自己的查询对象
$myquery->posts
根据我们的习惯分类
menu_order_sort
作用现在唯一棘手的部分是,我们必须使用自定义查询对象构建循环:
while($myquery->have_posts()) : $myquery->the_post();
?>
<div><a id="post_id_<?php the_ID(); ?>" class="nb" href="<?php the_permalink(); ?>"><?php the_title(); ?></a> Post ID: <?php the_ID(); ?>
</div>
<?php
endwhile;
wp_reset_postdata();
显然,您需要在那里修复循环模板代码。
我希望找到一个不需要使用自定义查询对象的解决方案,也许可以使用query_posts()
以及更换posts
全球财产$wp_query
, 但我就是不能让它正常工作。如果再多花点时间,这可能是可行的。
不管怎样,看看这能不能帮你找到你想去的地方?