使用投票数排序后新自定义文章不显示的问题求助
问题分析与解决方案
你的问题主要出在两个关键细节上:错误的文章状态参数和未纳入无投票记录的新文章,下面一步步帮你解决:
1. 修正post_status参数错误
WordPress中已发布文章的标准状态值是publish,而不是你代码里的published——这个小错误会直接过滤掉所有新发布的正常文章,因为它们的状态标记是publish,完全不匹配你的查询条件。
2. 让查询包含无投票记录的新文章
新发布的自定义文章还没有收到任何投票,所以不会生成_liked这个元键。默认情况下,使用meta_key => '_liked'和orderby => 'meta_value_num'的查询,只会返回存在该元键的文章,这就是新文章不显示的核心原因。
我们需要调整meta_query,让它同时包含**有投票记录(存在_liked元键)和无投票记录(不存在_liked元键)**的文章,同时保留你原有的sponsored过滤规则。
修正后的完整代码
$args = array( 'post_type' => 'ico', 'post_status' => 'publish', // 修正为正确的已发布状态值 'orderby' => 'meta_value_num', 'meta_key' => '_liked', 'order' => 'DESC', // 可选:按点赞数从高到低排序,贴合"最受欢迎"需求 'posts_per_page' => -1, 'meta_query' => array( 'relation' => 'AND', // 确保sponsored条件与投票记录条件同时生效 array( 'key' => 'sponsored', 'value' => '0', 'compare' => '==' ), array( 'relation' => 'OR', // 同时包含有投票和无投票的文章 array( 'key' => '_liked', 'compare' => 'EXISTS', 'type' => 'NUMERIC' // 确保按数字类型排序,避免字符串排序误差 ), array( 'key' => '_liked', 'compare' => 'NOT EXISTS' ) ) ) );
额外说明
- 加上
type => 'NUMERIC'是为了确保WP ULike存储的点赞数被当作数字处理,避免出现字符串排序的逻辑错误(比如"10"排在"2"前面的情况)。 - 无投票记录的新文章会被默认视为点赞数为0,自动排在所有有投票的文章之后,符合正常的排序逻辑。
内容的提问来源于stack exchange,提问作者Urek Mazino
相关产品推荐
相关产品推荐

