我正在尝试按自定义字段对帖子进行排序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;
}
最合适的回答,由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\' );
}
}