我用它来列出所有帖子标题......
<?php
$args = array(
'posts_per_page' => -1,
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'ASC'
);
query_posts($args);
if (have_posts()) :
while (have_posts()) :
the_post(); ?>
<p>
<?php the_title(); ?>
</p>
<?php endwhile;
endif;
wp_reset_query();
?>
......这很好。
我的每个帖子都有一个名为start_date
的自定义字段。所有这些开始日期都以DD-MM-YYYY格式输入(例如:10-03-2016)。
我需要做的事情(如果可以做到的话,我就不会这样做)是按start_date
(而不是title
)订购。
进一步说明,如果有3个帖子的开始日期如此......
Post 1:01-11-2016
Post 2:03-01-2016
Post 3:12-07-2016
......帖子将按照......的顺序显示。
发布2
发布3
发布1
...因为这是正确的日期顺序。
我希望这是有道理的。
干杯。
答案 0 :(得分:0)
在wordpress WP_Query类中,accept args为post过滤器提供了更多帮助。 您可以在官方站点文档中检查提供自定义元字段接受查询args的顺序和orderby。
https://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters
在这种情况下我有两种处理方法。
$args = array( 'posts_per_page' => -1, 'post_type' => 'post', 'meta_key' => 'start_date', 'post_status' => 'publish', 'orderby' => 'meta_value', 'meta_type' => 'DATE', 'order' => 'ASC' );
完整代码
<?php
$args = array(
'posts_per_page' => -1,
'post_type' => 'post',
'post_status' => 'publish',
'meta_key' => 'start_date',
'orderby' => 'title',
'order' => 'ASC'
);
add_filter( 'posts_orderby', function($orderby){
return 'STR_TO_DATE( wp_postmeta.meta_value, "%d-%m-%Y") ASC';
});
query_posts($args);
if (have_posts()) :
while (have_posts()) :
the_post(); ?>
<p>
<?php the_title(); ?>
</p>
<?php endwhile;
endif;
wp_reset_query();
?>
希望这对你说英语不好有帮助。