按类别、按自定义字段排序的WordPress查询

时间:2012-05-31 作者:fubeca

我为事件类别中的每个帖子设置了三个自定义字段-年、月和日。我已经在查询事件类别,现在我想按自定义字段对帖子进行排序。我假设我只需要在代码的query\\u posts部分插入一些内容,但我不确定是什么。有什么建议吗?

<?php query_posts(\'category_name=events&showposts=6\'); ?>
<?php while (have_posts()) : the_post(); ?>
    <li>
        <div class="date">
            <span class="day"><?php echo get_post_meta($post->ID, \'month\', true); ?>/<?php echo get_post_meta($post->ID, \'day\', true); ?></span>
            <span class="year"><?php echo get_post_meta($post->ID, \'year\', true); ?></span>
        </div>
        <div class="details">
            <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> &rarr;</h3>
        </div>
    </li>
<?php endwhile; ?>
我可以解释更多:帖子的创建日期并不重要,但我想先按“年”自定义字段排序,然后按“月”自定义字段排序,然后按“日”自定义字段排序

3 个回复
SO网友:goldenapples

我不认为有一个简单的方法可以按三个不同的元值进行排序,实际上,我不明白在这种情况下为什么需要这样做。为什么不将事件日期保存在一个元值中并按其排序?它使您的查询更加高效(删除两个不必要的连接),并允许您使用WP\\u查询orderby 字段对您的帖子进行排序,而不是编写自定义查询或过滤查询的每个SQL子句以使其按您的要求进行操作。

SO网友:inTOWN

我认为可以通过添加

meta_key=yourcustomfield&orderby=meta_value
到查询

SO网友:matchdav

首先,您不应该使用query\\u帖子。其次,应该传递数组而不是查询字符串。

$query = new WP_Query( array( 
\'category\' => \'event\',
\'meta_key\' => \'month\', 
\'meta_value\' => \'June\', 
\'meta_compare\' => \'<\' 
\'orderby\' => \'month\')
//or whatever parameters you choose.
);
// The Loop
while ( $query->have_posts() ) : $query->the_post();
//your markup goes here
endwhile;

// Reset Post Data
wp_reset_postdata();

结束

相关推荐

带有自定义帖子类型ID的WP_QUERY

尽管我是100%肯定的,$mixtape\\u id设置为一个整数,该整数对应于“mixtaples”自定义post类型中的一个post,但此代码没有响应任何内容$query = new WP_Query(array( \'post_type\' => \'mixtapes\', \'p\' => (int)$mixtape_id, \'posts_per_page\' => -1, \'orderby\