按自定义字段对帖子排序

时间:2013-05-17 20:46:06

标签: php wordpress

每个帖子都有一个发布日期和“资源字段”,其中我有另一个日期字段(与发布日期不同)。有人能告诉我如何才能访问...资源字段日期?我有帖子,我需要按“资源字段” - >每个类别的日期desc对它们进行排序。

这是查询但不起作用......

<?php $terms = get_terms( 'resources-categories', array('hide_empty' => false)); ?>
<?php foreach( $terms as $term ): ?>
<ul>
<?php
$query = new WP_Query( array(
            'post_type' => 'resources',
            'resources-categories' => $term->slug,
            'posts_per_page' => '-1',
            'meta_key' => 'date',
            'meta_value' => date('F Y'),
            'meta_compare' => '>',
            'orderby' => 'meta_key',
            'order' => 'DESC',
            'post_parent' => 0) 
            );
if ($query->have_posts()) : $count = 0;
while($query->have_posts()) :
$query->the_post(); ?>
<li> 
//print code...
</li>
<?php endwhile; endif; ?>

1 个答案:

答案 0 :(得分:2)

我倾向于使用$args数组的meta_query属性获得更好的运气。以下是使用此属性重新构建的示例:

$today = date('Y-m-d');
$args = array(
    'post_type' => 'resources',
    'posts_per_page' => '-1',
    'meta_key' => 'date',
    'meta_query' => array(
        array(
            'key' => 'date',
            'value' => $today,
            'type' => 'date',
            'compare' => '>'
        )
    ),
    'orderby' => 'meta_value_num',
    'order' => 'DESC',
    'post_parent' => 0
);

几点说明:

  • 请注意,我更改了您的日期格式。您的原始格式将使用月份的文本表示。 WordPress无法“比较”该值,因为它表示为字符串。我假设您的日期以yyyy-mm-dd的标准SQL格式存储。但这可能是一个重要的障碍。您只需要确定您可以知道日期的实际格式(因为它存储在数据库中),然后在$today变量中匹配该格式。

  • 请注意,我已包含meta_key值。它看起来多余,但事实并非如此。分拣工作需要它。

  • 最后,您添加了一个名为'resources-categories' => $term->slug的属性,但这不会对查询产生任何影响。 (所以我删除了它)。如果您需要针对分类法进行额外查询,则需要查看$args数组的tax_query属性。

希望这有点帮助,玩得开心!