Ordering by meta_key

时间:2012-12-05 作者:Steven Jones

我正在尝试在“作业”帖子类型存档页面上排序主查询。我想通过meta\\u键对它们进行排序,以便首先显示具有值(即被选中为特征)的那些。这是我目前的情况。。

function featured_jobs_order( $orderby ) {

    if( !is_post_type_archive(\'jobs\') ) {
        return $orderby;
    }

    global $wpdb;
    $orderby = $wpdb->postmeta . \'.meta_value DESC, \' . $orderby;
    return $orderby;

}

add_filter(\'posts_orderby\', \'featured_jobs_order\' );

function change_jobs_query( $query ) {

    if ( is_post_type_archive( \'jobs\' ) ) {
        $query->set( \'meta_key\', \'featured\' );
        return;
   }
}

add_action( \'pre_get_posts\', \'change_jobs_query\', 1 );
目前,它只带回了那些有特色的,而没有带回其余的。

干杯,史蒂夫

2 个回复
SO网友:Matthew Boynes

这是因为WordPress构造MySQL查询的方式posts 连接postmeta. 如果帖子中没有值featured, 它不会加入。这里有两个选项供您选择:

更新存储方式featured 要存储该值,请忽略(“1”或“0”)。确保每个帖子都有featured 他们都会出现的。如果您使用复选框来设置值,这很容易:在其上方放置一个与复选框名称相同的隐藏字段和“未设置”值。如果选中该复选框,它将覆盖隐藏字段。

在此存档页中使用两个循环。你可以使用我建议的技巧in this question 确保你的特色帖子不会出现两次。

SO网友:Andrew Odri

我建议您不要试图通过functions.php, 尝试为名为的作业帖子类型创建存档页archive-jobs.php 在模板目录中。如果它是这样命名的,WordPress will associate it as the archive page 用于自定义帖子类型。

然后,修改该页面上的循环查询:(参见示例WP_Query Order & Orderby Parameters)

<?php query_posts( array( \'post_type\' => \'jobs\', \'orderby\' => \'meta_value\', \'meta_key\' => \'featured\' ) ); ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <?php the_content(); ?>
<?php endwhile; else: ?>
    <p>Sorry, no posts matched your criteria.</p>
<?php endif; ?>

结束

相关推荐