You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按浏览量从高到低排序WordPress文章的技术实现需求

Elementor自定义文章查询与排序实现方案

需求

需要在Elementor中展示两类文章,并按浏览量从高到低排序:

  • 带有有效浏览量的文章:由wp-view-counter插件统计,对应文章元字段entry_views值非空
  • 标记为trending的文章:属于filter分类法下slug为trending的术语,无论是否有浏览量
  • 排序规则:浏览量高的在前,无浏览量的trending文章排在末尾

原代码问题

  1. WHERE条件逻辑重复混乱,可能筛选出不符合预期的文章
  2. 未处理排序逻辑,仅传递文章ID但未按浏览量排序
  3. JOIN表的方式不够严谨,容易产生重复数据

修正后的代码

function my_custom_elementor_query( $query ) {
    global $wpdb;

    // 构建SQL查询,获取符合条件的文章ID并按浏览量降序排序
    $sql = "
        SELECT DISTINCT p.ID, COALESCE(CAST(pm.meta_value AS UNSIGNED), 0) AS view_count
        FROM {$wpdb->posts} p
        LEFT JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id AND pm.meta_key = 'entry_views'
        LEFT JOIN {$wpdb->term_relationships} tr ON p.ID = tr.object_id
        LEFT JOIN {$wpdb->term_taxonomy} tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
        LEFT JOIN {$wpdb->terms} t ON tt.term_id = t.term_id
        WHERE p.post_type = 'post' 
          AND p.post_status = 'publish'
          AND (
              (pm.meta_value IS NOT NULL AND pm.meta_value != '')
              OR (t.slug = 'trending' AND tt.taxonomy = 'filter')
          )
        ORDER BY view_count DESC, p.post_date DESC
    ";

    $post_ids = $wpdb->get_col( $sql );

    if ( ! empty( $post_ids ) ) {
        $query->set( 'post__in', $post_ids );
        $query->set( 'orderby', 'post__in' ); // 遵循SQL查询返回的ID排序顺序
    } else {
        $query->set( 'post__in', array(0) ); // 无符合条件文章时返回空结果
    }
}
add_action( 'elementor/query/custom_filter', 'my_custom_elementor_query' );

代码说明

  • 浏览量处理:用COALESCE(CAST(pm.meta_value AS UNSIGNED), 0)将entry_views转为数字类型,无浏览量的trending文章默认浏览量为0
  • 条件筛选:明确区分两类文章的筛选逻辑,避免冗余和错误匹配
  • 排序规则:先按浏览量降序排列,浏览量相同则按文章发布时间降序
  • Elementor适配:通过orderby = 'post__in'让Elementor的查询遵循我们SQL返回的ID顺序,确保排序生效
  • 结果控制:增加post_type和post_status限制,只获取已发布的文章(可根据实际内容类型调整)

内容的提问来源于stack exchange,提问作者danial

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 17:25:09