Sorting Posts by custom field

时间:2015-04-08 作者:Thomas Martin

我正在尝试按自定义字段对帖子进行排序artwork_title. 当我使用下面的代码时,我只会得到一个特定类别的帖子,无论我在哪个类别的存档中。

此外,分页显示正确的页数,但转到下一页时始终显示相同的帖子集。有人知道我做错了什么吗?

<?php $query = new WP_Query(
    array(
        \'posts_per_page\' => 20,
        \'orderby\' => \'meta_value\',
        \'meta_key\' => \'artwork_title\',
        \'order\' => \'ASC\'
    ) ); ?>

            <?php while ( $query->have_posts() ) : $query->the_post(); ?>

                <?php get_template_part( \'content\', get_post_format() );
                ?>

            <?php endwhile; ?>
@PieterGoosen建议使用pre_get_posts. 我没有这方面的任何经验,但我把它放在了一起,但我用它并没有得到任何结果。我肯定这是件愚蠢的事。

<?php add_action( \'pre_get_posts\', \'sort_artwork_title\' );?>

function sort_artwork_title( $query )
{
    if (is_admin()){
        return;
    }

   if( $query->is_main_query() && is_post_type_archive() ) {


            $query->set(\'orderby\', \'artwork_title\');
            $query->set(\'posts_per_page\', \'20\');
            $query->set(\'order\', \'ASC\' );
        }
    return $query;
}

1 个回复
最合适的回答,由SO网友:mrwweb 整理而成

要扩展@pieter goosen的评论,您确实想使用pre_get_posts. 在您的示例中,通过使用WP_Query, 您正在覆盖整个查询,只需将其大部分重置为默认值。事实上,你可能根本看不到特定类别的帖子。您应该看到所有帖子,因为这是WP_Query

因此,使用pre_get_posts 它修改现有的查询,而不是创建一个全新的查询。这里有一个[未经测试的]片段,应该可以在您的functions.php 文件:

add_action( \'pre_get_posts\', \'wpse183601_filter_category_query\' );
function wpse183601_filter_category_query( $query ) {
    // only modify front-end category archive pages
    if( is_category() && !is_admin() && $query->is_main_query() ) {
        $query->set( \'posts_per_page\',\'20\' );
        $query->set( \'orderby\',\'meta_value\' );
        $query->set( \'meta_key\',\'artwork_title\' );
        $query->set( \'order\',\'ASC\' );
    }
}

结束