更新:我尝试使用以下代码:
<?php if (is_category(events)) {
$posts = query_posts($query_string . '&orderby=event_date&order=desc');
} else {
$posts = query_posts($query_string . '&orderby=title&order=asc');
}
?>
有什么理由不起作用吗?它似乎按字母顺序组织帖子很好,但在“事件”中的日期顺序仍然没有运气。
-
在搜索了各种现有问题之后,我无法找到解决我想要做的事情的方法。
目前我网站上的所有帖子都是按字母顺序排序的,除了我添加的一个新类别外,这很好。对于此类别,我想按照我在自定义字段中输入的值来订购所有帖子。该字段被称为'event_date' - 所以我想基本上按日期排序帖子,而不是创建帖子的日期,即用户手动输入此字段的日期。
我设法通过使用:
来实现它<?php if (is_category($events)) { $posts = query_posts($query_string . '&orderby=$event_date&order=asc'); } ?>
然而,这会覆盖所有其他页面的aphabetical顺序。
我按字母顺序使用:
<?php if (is_category()) { $posts = query_posts( $query_string . '&orderby=title&order=asc' ); } ?>
基本上我想要一个声明,告诉页面以aphabetical顺序排序所有帖子,除非该类别是'events',我想按自定义事件日期对它们进行排序。
你可能会说我非常喜欢前端,而不是后端所以这对我来说很新,所以任何帮助或建议都会受到赞赏。
答案 0 :(得分:1)
要按自定义字段值排序帖子,您需要将自定义元字段添加到查询本身。除了orderby=meta_value
之外,meta_key=metafieldid
将允许以这种方式进行排序。
如果get_query_var( "cat" )
(或类似的查询var)返回所需的帖子类别,我会使用pre_get_posts
hook并修改查询对象。
add_action( "pre_get_posts", "custom_event_post_order" );
function custom_event_post_order( $query )
{
$queried_category = $query -> get_query_var( "cat" );
/*
* If the query in question is the template's main query and
* the category ID matches. You can remove the "is_main_query()"
* check if you need to have every single query overridden on
* a page (e.g. secondary queries, internal queries, etc.).
*/
if ( $query -> is_main_query() && $queried_category == 123 )
{
$query -> set( "meta_key", "event_date" ); // Your custom field ID.
$query -> set( "orderby", "meta_value" ); // Or "meta_value_num".
$query -> set( "order", "ASC" ); // Or "DESC".
}
}
请记住,此方法会覆盖使用相关类别的所有查询。您可以构建使用自己的参数构建循环的自定义WP_Query对象。
您还应该标准化将自定义字段数据保存到数据库的方式。对于日期,我更喜欢使用易于移动和操作的UNIX时间戳格式化时间。这样,查询时不会发生意外,而某些数据的格式则是其他方式。
免责声明:我没有时间测试上面的代码,但总体思路应该可以正常运行。
编辑:当然上面的代码应插入functions.php
或类似的通用函数文件。
答案 1 :(得分:0)
希望我理解您的问题,使用WP_Query
并在orderby
中按列添加订单之间的空格:
$args = array(
'posts_per_page' => 100,
'orderby' => 'title',
'order' => 'ASC',
);
if(is_category($events)){
$args['orderby'] .= " meta_value_num";
$args['meta_key'] = 'event_date';
}
$posts = (array) new WP_Query( $args );
答案 2 :(得分:0)
怎么样:
<?php $posts = query_posts($query_string . (is_category($events)?'&orderby='.$event_date:'&orderby=title') . '&order=asc'); ?>
答案 3 :(得分:0)
<?php
$recent = new WP_Query(“cat=ID&showposts=x”);
while($recent->have_posts()) : $recent->the_post();
?>