在商店页面上显示所有产品和变体,同时保持分页

2024-03-30

我需要显示每个产品,如果它是可变产品(例如多种颜色),则在商店页面上显示每个变体。

首先,我编写了自己的查询来检索所有变体(如果产品有的话):

$product = get_product();
global $variable_id;
global $color;
if ($product->product_type == "variable") {
    $variations = $product->get_available_variations();
    foreach ($variations as $variation) {
        $color = $variation["attributes"]["attribute_pa_colour"];
        $variable_id = $variation['variation_id'];
        wc_get_template_part('content', 'product');
    }
} else {
    $variable_id = null;
    $color = null;
    wc_get_template_part('content', 'product');
}

我为变体设置了全局参数,然后在另一个模板文件中成功获得了正确的图像。

此解决方案的问题是分页被破坏(1 个产品出现多次)。

因此,我需要实现的是操作主产品查询来选择所有产品,其中具有变体的产品必须为每个变体出现一次,并具有正确的图像链接和变体值(我还需要主产品的信息来链接到正确的页面)。 这可以通过以下方式实现Left Join在同一个产品表上,基于post_parent.

这里的关键是保持默认的 woocommerce 行为。这是用于检索产品的 woocommerce 函数:

private function query_products( $args ) {
    // Set base query arguments
    $query_args = array(
        'fields'      => 'ids',
        'post_type'   => 'product',
        'post_status' => 'publish',
        'meta_query'  => array(),
    );
    if ( ! empty( $args['type'] ) ) {
        $types = explode( ',', $args['type'] );
        $query_args['tax_query'] = array(
            array(
                'taxonomy' => 'product_type',
                'field'    => 'slug',
                'terms'    => $types,
            ),
        );
        unset( $args['type'] );
    }

    // Filter products by category
    if ( ! empty( $args['category'] ) ) {
        $query_args['product_cat'] = $args['category'];
    }

    // Filter by specific sku
    if ( ! empty( $args['sku'] ) ) {
        if ( ! is_array( $query_args['meta_query'] ) ) {
            $query_args['meta_query'] = array();
        }
        $query_args['meta_query'][] = array(
            'key'     => '_sku',
            'value'   => $args['sku'],
            'compare' => '='
        );
        $query_args['post_type'] = array( 'product', 'product_variation' );
    }
    $query_args = $this->merge_query_args( $query_args, $args );
    return new WP_Query( $query_args );
}

所以基本上,我需要找到一种方法来重写这个函数,以便WP_Query返回的对象包含所有“简单”产品以及所有“可变”产品的每个变体的产品,而所有参数都通过$args继续工作。


我找到了一个解决方案:“Woocommerce Show Single Variations”插件:https://iconicwp.com/products/woocommerce-show-single-variations/ https://iconicwp.com/products/woocommerce-show-single-variations/

备注:如果您已有类别,则必须删除并重新添加它们。此外,它仍然不适用于短代码,但作者正在努力解决它。

Updated:更改了插件的链接

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在商店页面上显示所有产品和变体,同时保持分页 的相关文章

  • APC 将数据存储在哪里?

    我想用apc store 缓存一些结果 但我需要知道数据将存储在哪里 以及限制是什么 它总是存储在内存中吗 或者也写入磁盘 我希望将不经常访问的数据存储在磁盘上 我应该为此使用不同的缓存系统吗 这就是极限了吗 apc shm size 32
  • Laravel 中间件将变量返回给控制器

    我正在对用户进行权限检查 以确定他们是否可以查看页面 这涉及首先通过一些中间件传递请求 我遇到的问题是 在将数据返回到视图本身之前 我在中间件和控制器中复制相同的数据库查询 这是设置的示例 路线 php Route get pages id
  • cUrl 在本地主机上工作正常,但在服务器上不起作用,仅显示空白页面

    当我在服务器上运行以下代码时 它只显示空白页面并突然停止进一步执行 我还检查了已安装的服务器上的 cUrl 这是我的代码 ftp server ftps server Voorraadtonen link csv ch curl init
  • 如何在php中获取#后面的URL锚点部分

    在我的项目中使用 LightBox 机制时 我得到了一个 URLhttp nhs search panel php patentid 2 http nhs search panel php patientid 2我需要通过 GET 机制从中
  • Drupal:需要上传文件吗?

    由于某种原因 当我尝试要求上传文件时 我的表单中断了 这是它的代码 form id upload form form form id array type gt fieldset description gt t This is a uti
  • PHP Reflection:如何知道方法/属性/常量是否从特征继承?

    我想从列表中排除特征的所有继承方法 在类中未被覆盖的那么如何知道一个类成员是否继承自trait呢 是的 我可以这样检查 if trait gt hasMethod methodName ref gt getTraitAliases meth
  • 删除 SQL 中重复的字段条目

    无论如何 我可以删除某个表中的所有重复条目 users 这是我拥有的条目类型的示例 我必须说一下桌子users由3个字段组成 ID user and pass mysql query DELETE FROM users WHERE or d
  • WooCommerce |如何删除“缺货”可变价格范围

    我正在开发一个 WooCommerce 网站 该网站包含许多可变产品和用户角色 这些产品和用户角色会动态影响显示的价格 我需要创建一个代码片段 将其添加到我的functions php 文件中 以仅显示库存商品的可变产品价格范围 并根据用户
  • 将 UTC 日期转换为 PHP 本地时间

    我使用以下方法将 UTC 日期存储到数据库中 utc gmdate M d Y h i s A 然后我想将保存的 UTC 日期转换为客户端的本地时间 我怎样才能做到这一点 Thanks 如果客户端指的是浏览器 那么您首先需要从浏览器将时区名
  • PHP:调用另一个类的方法

    我仍在学习 OOP 所以这甚至可能是不可能的 尽管如果是这样我会感到惊讶 我需要一些帮助来调用另一个类方法 例如在ClassA I有这个方法 function getName return this gt name 现在从ClassB 不同
  • 有人成功地使用 PHP 5.4.4 和 APC 3.1.10 提供高流量服务吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • cookie神秘重现的原因是什么?

    我正在开发一个使用 cookie 来存储会话信息的 Web 应用程序 我已经手动删除了会话 cookie 因为我正在处理代码的另一部分 我不需要登录会话 然而 在页面重新加载几次后 会话 cookie 神秘地重新出现 其中包括我之前出于测试
  • 让浏览器缓存我的动态 PHP 样式表

    我想在 PHP 文件 styles php 中创建一个样式表 以便样式表变得动态 具体取决于请求的用户 对于每个单独的用户来说 样式表是不变的 因此应该缓存在他的客户端浏览器上 我读过 您可以通过设置内容类型和缓存控制等标头来实现此目的 但
  • 无法发送任何电子邮件

    我不断收到错误消息 warning mail a href function mail function mail a Failed to connect to mailserver at quot localhost quot port
  • PHP Microsoft Excel 文件生成/导出类

    我一直在寻找一个好的 Excel 文件生成类 但还没有找到 我的首要问题是 虽然我可以在 Excel 中打开导出的文件 运行 2007 年 但我总是收到一条警告 文件的格式与文件扩展名不同 我注意到 phpMyAdmin 中的 Excel
  • CodeIgniter 3 - 在控制器中支持 API 和 Web 请求?

    我目前正在使用 CodeIgniter3 应用程序 并为标准的类似博客系统奠定了基础 该结构是标准 CI 用户请求页面 页面加载控制器方法 控制器方法从其模型调用任何相关的数据库函数 然后加载视图 不过 我还希望能够通过 API 访问此视图
  • 重定向后 HTML5 CORS 请求在 safari 中失败

    我正在使用 jQuery 制作 CORS 请求来完成 SSO 类型系统 用户登录 WordPress 同时使用钩子也登录 Moodle 我遇到的问题是 在 Safari 中 仅限 safari 7 当初始 POST 请求设置为 mudles
  • 如何使用 PHP 解释 HTML5 输入日期值

    我需要让用户选择一个日期 最好采用 dd mm yy 格式 我决定尝试新的 HTML5 输入日期类型 但是我不知道如何解释它在服务器端给出的值 我得到的值是 yyyy mm dd 我怎样才能做到这一点 如果用户使用不支持它的旧版浏览器怎么办
  • 参考指南:这个符号在PHP中是什么意思? (PHP 语法)

    这是什么 这是关于 PHP 语法时不时出现的问题的集合 这也是一个社区 Wiki 因此邀请每个人参与维护此列表 为什么是这样 过去很难找到有关运算符和其他语法标记的问题 主要思想是提供 Stack Overflow 上现有问题的链接 这样我
  • 我如何加入 Eloquent:关系?

    我的查询是这样的

随机推荐