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

如何在WooCommerce店铺保留最新排序同时指定位置展示特定商品?

解决方案:保留最新排序同时固定特定商品到指定位置

我完全理解你的需求——既要维持WooCommerce商品列表默认的「按最新排序」逻辑,又要把指定商品强制固定到你想要的展示位置,而不是替换整个排序规则。默认的自定义排序方案确实会覆盖主排序,所以我们需要用代码钩子来实现这个个性化需求,下面是具体的实现步骤:

核心思路

通过WordPress的posts_results钩子,在默认的最新排序结果生成后,手动调整数组结构:先把要固定的商品从原结果中移除,再插入到目标位置,既保留原有排序,又实现定点展示。

代码实现

把以下代码添加到你的子主题functions.php文件,或者自定义插件中:

add_filter('posts_results', 'custom_pin_products_to_specific_positions', 10, 2);
function custom_pin_products_to_specific_positions($posts, $query) {
    // 仅在店铺商品归档主查询中生效,避免干扰其他页面
    if (!is_shop() || !$query->is_main_query()) {
        return $posts;
    }

    // 配置需要固定的商品:键是目标位置的数组索引(注意:数组从0开始,第6位对应索引5),值是商品ID
    $pinned_products = [
        5 => 29961, // 固定商品ID 29961到第6位
        11 => 12345 // 替换成你需要固定到第12位的商品ID
    ];

    // 第一步:从原结果中移除要固定的商品,防止重复展示
    $filtered_posts = [];
    foreach ($posts as $post) {
        if (!in_array($post->ID, $pinned_products)) {
            $filtered_posts[] = $post;
        }
    }

    // 第二步:将固定商品插入到指定位置
    foreach ($pinned_products as $target_index => $product_id) {
        $pinned_product = get_post($product_id);
        if ($pinned_product) {
            // 如果目标索引在当前结果范围内,插入到对应位置
            if (isset($filtered_posts[$target_index])) {
                array_splice($filtered_posts, $target_index, 0, [$pinned_product]);
            } else {
                // 如果目标位置超出当前页面商品数量,自动追加到末尾
                $filtered_posts[] = $pinned_product;
            }
        }
    }

    return $filtered_posts;
}

关键说明

  • 索引对应关系:因为PHP数组是从0开始计数的,所以第6位对应的数组索引是5,第12位对应索引11,配置时一定要注意这个细节!
  • 生效范围:当前代码只在店铺主页面生效,如果需要在商品分类页也应用这个规则,可以把is_shop()改成is_woocommerce()或者is_product_category()。
  • 分页处理:这个逻辑仅对当前分页的商品列表生效,比如第6位只会出现在第一页,第二页的排序依然保持最新规则。
  • 重复避免:代码会自动移除原排序结果中已存在的固定商品,确保每个商品只展示一次。

注意事项

  • 建议使用子主题添加代码,避免主题更新导致代码丢失;如果频繁修改功能,也可以创建一个简单的自定义插件来管理这些代码。
  • 如果需要调整更多固定位置,直接在$pinned_products数组中添加新的键值对即可,格式为[目标索引] => [商品ID]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:57:55