对于简单且可变的产品,以特定的 html 结构显示一些数据

2023-12-14

在 WooCommerce 中,我想创建一个函数,为每个变体或可变产品输出一个简单的数据“列表”。或者,如果是一个简单的产品,那么该产品本身的细节。我需要为每个项目添加的详细信息是:regular price, size attribute(用于变体)sale price, stock.

这是针对 WooCommerce 产品页面的“目录”版本,因此不会有实际的“添加到购物车”按钮或“变体”下拉列表。相反,我想呈现以下信息each向用户提供的产品/变体。

我需要输出每个数据,作为列表项<ul>. A new <ul>对于每个变体。

具有 3 种变体的产品示例:

<div class="fs-product-data-wrapper">
  <ul>
    <li class="fs-data-price">$49.98 ea.</li>
    <li class="fs-data-size">Size: 15-18"</li>
    <li class="fs-data-sale">$49.98 ea. Preferred Customer Price</li>
    <li class="fs-data-stock">Quantity in Stock: 40</li>
  </ul>
  <ul>
    <li class="fs-data-price">$799.98 ea.</li>
    <li class="fs-data-size">Size: 2-2.5'</li>
    <li class="fs-data-sale">$67.98 ea. Preferred Customer Price</li>
    <li class="fs-data-stock">Quantity in Stock: 15</li>
  </ul>
  <ul>
    <li class="fs-data-price">$29.98 ea.</li>
    <li class="fs-data-size">Size: 12"</li>
    <li class="fs-data-sale">$19.98 ea. Preferred Customer Price</li>
    <li class="fs-data-stock">Quantity in Stock: 0</li>
  </ul>
</div>

没有变化的产品示例,只是一个简单的产品:

<div class="fs-product-data-wrapper">
  <ul>
    <li class="fs-data-price">$99.98 ea.</li>
    <li class="fs-data-size">Size: 15-18"</li>
    <li class="fs-data-sale">$99.98 ea. Preferred Customer Price</li>
    <li class="fs-data-stock">Quantity in Stock: 32</li>
  </ul>
</div>

示例截图:

Screenshot of example

我可以管理它的CSS。我只需要能够在一段时间内生成这些数据ul对于每个“选项”。理想情况下,这也可以通过短代码完成,因为我将通过页面构建器模板填充它。但如果它挂接到现有的产品页面挂钩上,我就可以做到。也许woocommerce_after_single_product.


以下是一种显示简单和可变产品的一些特定格式的产品数据的方法:

// Utility funtion: getting and formtting product data
function format_product_data_output( $the_id ){
    $empty =  __( '<em>(empty)</em>', 'woocommerce' );

    // Get an instance of the WC_Product_Variation object
    $product = wc_get_product( $the_id );

    // Only wc_get_price_to_display() respect if product is to be displayed with or without including taxes
    $price = wc_price( wc_get_price_to_display( $product, array( 'price' => $product->get_regular_price() ) ) );
    $sale_price = wc_get_price_to_display( $product, array( 'price' => $product->get_sale_price() ) );
    $sale_price = ! empty( $sale_price ) ? wc_price($sale_price) : $empty;

    $size = $product->get_attribute( 'pa_size' );
    $size = ! empty( $size ) ? get_term_by( 'slug', $size, 'pa_size' )->name : $empty;

    $stock_qty = $product->get_stock_quantity();
    $stock_qty = ! empty( $stock_qty ) ? $stock_qty : $empty;

    $output = '
    <ul>
        <li class="fs-data-price">'.$price.'</li>
        <li class="fs-data-size">Size: '.$size.'</li>
        <li class="fs-data-sale">'.$sale_price.' Preferred Customer Price</li>
        <li class="fs-data-stock">Quantity in Stock: '.$stock_qty.'</li>
    </ul>';

    return $output;
}

//
add_action( 'woocommerce_after_single_product', 'custom_table_after_single_product' );
function custom_table_after_single_product(){
    global $product;

    $output = '<div class="fs-product-data-wrapper">';

    // Variable products
    if( $product->is_type('variable'))
    {
        // Get available variations in the variable product
        $available_variations = $product->get_available_variations();

        if( count($available_variations) > 0 ){
            foreach( $available_variations as $variation )
                $output .= format_product_data_output( $variation['variation_id'] );
        }
    }
    // Simple products
    elseif( $product->is_type('simple'))
    {
        $output .= format_product_data_output( $product->get_id() );
    }
    else return; // Exit

    echo $output .= '</div>'; // Display
}

代码位于活动子主题(或活动主题)的 function.php 文件中。经过测试并有效。

你必须管理CSS(可能还有一些小细节)。需要的东西大部分都在那里。

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

对于简单且可变的产品,以特定的 html 结构显示一些数据 的相关文章

  • 垂直对齐复选框标签? [复制]

    这个问题在这里已经有答案了 我有这样的复选框
  • 如何指定网站的语言? (HTML?)

    如何指定页面采用某种语言以便搜索引擎可以理解 这是我放在顶部的元标记吗 如果是 您知道大多数搜索引擎是否使用它来确定语言吗 我已将一页英文内容转换为几种不同的语言 并希望将该信息包含在 html 中 让搜索引擎知道他们正在处理哪种语言 快速
  • 使用 JavaScript 使链接保持活动状态并在单击时显示悬停效果

    I am struggling to make this work I d like to make it where if O F is clicked the hover state stays active if another li
  • 随机组合 MySQL 数据库中的两个单词

    我有一个包含名词和形容词的数据库 例如 id type word 1 noun apple 2 noun ball 3 adj clammy 4 noun keyboard 5 adj bloody ect 我想创建一个查询 它将抓取 10
  • 覆盖控制器 Symfony 3.4/4.0

    我目前正在尝试覆盖 FOSUserBundle 中的控制器 在新的文档中 https symfony com doc 3 4 bundles override html https symfony com doc 3 4 bundles o
  • 保持未知数量的 div 居中,每行最多 4 个

    我有一个简单的问题 但我自己无法解决 简而言之 有一个未知电话我必须在页面中放置的元素数量 最多 每行 4 个元素 但仍居中 此图片给您一个提示 我为了示例而设置它 详细 在上图中我涵盖了不同的场景 例如 如果总共有 5 个元素 则应使用第
  • 在 apache docker 容器中运行虚拟主机

    我在同一个 apache 容器中有两个 php 应用程序 我试图在端口上运行其中一个应用程序 因为它需要通过根域而不是子文件夹进行访问 我想在端口 8060 上运行应用程序 我尝试使用 apache 虚拟主机执行此操作 但它不会加载页面 h
  • PHP 中只保留数组的前 N ​​个元素? [复制]

    这个问题在这里已经有答案了 有没有办法只保留数组的前 N 个 例如 10 个 元素 我知道有array pop 但是有没有更好 更优雅的方法呢 您可以使用array slice http php net array slice or arr
  • SQL 最近日期

    我需要在 php 中获取诸如 2010 04 27 之类的日期作为字符串 并在表中找到最近的 5 个日期 表中的日期保存为日期类型 您可以使用DATEDIFF http dev mysql com doc refman 5 1 en dat
  • PHP HEREDoc (EOF) 语法在 Sublime Text 3 上突出显示与正斜杠的差异

    我不熟悉 Sublime Text 3 如何使用语法突出显示 例如 如果它纯粹依赖于主题 或者它内置于主题运行的标准中 但就我而言 使用 PHP 的 HERE 文档和转发存在一些语法突出显示差异斜线 一旦出现正斜杠 ST3 就会认为以下所有
  • 如何阻止破折号自行包裹?

    我有一个标题 标题最后一个单词的末尾是一个破折号 单词和破折号之间没有空格 当浏览器窗口变小时 破折号会中断并换成新行 在自己的行上有一个破折号是不好的排版 如何停止破折号之前的换行 以便最后一个单词运行到新行 这是代码 h1 XYZ co
  • Laravel 中只向登录用户显示按钮

    如果我以 John 身份登录 如何才能只显示 John 的红色按钮而不显示 Susan 的红色按钮 测试系统环境 Win10 Laravel5 4 Mysql5 7 19 table class table table responsive
  • 如何在 PHP 中从 IP 地址/国家/地区名称查找时区 ID?

    谁能告诉我 PHP 中是否有任何方法可以从 IP 地址或国家 地区名称获取时区区域 例如 亚洲 加尔各答 描述 我正在尝试根据他 她的国家 地区设置用户时区 我从他的 IP 地址获取用户所在国家 地区 但我需要该国家 地区的时区区域 例如
  • 我可以使用 jQuery 打开下拉列表吗

    对于 HTML 中的下拉列表
  • 如何在jquery中以相反的顺序迭代元素? [复制]

    这个问题在这里已经有答案了 我是jquery的新手 我想知道如何使用each 在jquery中以相反的顺序迭代表单元素 任何帮助 将不胜感激 尝试这个 input get reverse each function
  • 如何在 Laravel 中使用 PUT http 动词提交表单

    我知道这个问题可能已经提出 但我就是无法让它发挥作用 如果有人可以帮助我 我将非常感激 我安装了 colletive form 但答案也可以是 html 表单标签 现在列出我的表格 我的路线和我的例外情况 Form model array
  • 为什么元素上的负底部边距会降低该元素父元素的高度?

    这可能是由于边距折叠造成的 我知道边距折叠 至少知道它如何影响相邻元素 但我不明白当涉及负边距时它如何在嵌套元素上工作 例如 在此标记和随附的 CSS 中 Markup div class parent div class child Ch
  • 如何获取浏览器视口中当前显示的内容

    如何获取当前正在显示长文档的哪一部分的指示 例如 如果我的 html 包含 1 000 行 1 2 3 9991000 并且用户位于显示第 500 行的中间附近 那么我想得到 500 n501 n502 或类似的内容 显然 大多数场景都会比
  • Magento - 自定义支付模块

    这是一个非常普遍的问题 但这里是 我正在尝试在 Magento 中创建一个自定义支付模块 我创建了一个 常规 模块 可以连接到 Magento 事件 观察者模型 但是我如何告诉 Magento 将模块视为支付模块 以便它显示在管理后端和结账
  • 无效字符错误:“fred”

    我确信他一定是一个新手问题 简单来说 我想定义我的第一个 Polymer dart 组件 只是我一直在同一个减速带上踢脚趾 为了使事情变得非常简单 我将其简化为一个非常简单的示例 我做了一个简单的rename示例 跑表 来自 Dart 组件

随机推荐

  • Volumes_from 指令 - docker compose

    与下面的docker compose yml file test build dockerfile docker dev Dockerfile volumes from cachev cachev build dockerfile dock
  • XPath 和 Jenkins Plot 插件

    我正在尝试使用 Jenkins 的 Plot 插件生成一个图表 显示我们的代码中有多少个 TODO 标记 我在构建过程中生成了一个 XML 文件 其中包含有关它们的数据 除其他外 每个 TODO 标记在 XML 中都有一行 如下所示
  • 使用 sqlalchemy WHERE 子句和 IN 运算符时保持顺序

    考虑以下数据库表 ID ticker description 1 GDBR30 30YR 2 GDBR10 10YR 3 GDBR5 5YR 4 GDBR2 2YR 可以用这段代码复制它 from sqlalchemy import Col
  • jQuery 验证 - 如何使用两个 XOR 规则验证一个字段

    我有一个字段可以包含电子邮件或手机 在我的例子中手机是 8 位数字 我已经尝试了两种方法 两个示例都不起作用 因为 元素 没有验证方法 第一种方法 创建自定义方法并在那里进行两种验证 但随后我必须创建自己的电子邮件和移动验证 我找不到在新方
  • useCallBack 执行两次

    为什么 useCallback 钩子执行两次 我收到一条警告 建议我使用 useCallback 所以我正在尝试这样做 据我了解 useCallback 仅在我们传递给数组的对象更新时才会执行 所以我的目标是在加载令牌后让 websocke
  • 从 ThreadPoolTask​​Executor 获取可调用对象或将 Runnable 转换为 Callable

    我在用着线程池任务执行器用于执行我的任务 这些任务是Callable界面 我只想及时检查任务是否仍在池中 监视 怎么做 我知道我可以从线程池执行器但我怎样才能将 Runnable 转换为 Callable 呢 基本上我有这个可调用的 pub
  • 启用和禁用 Android 中的日期

    我在我的应用程序中使用日历 在我的应用程序中成功实现了日历 但问题是如何启用和禁用特定日期 例如 需要在所有月份中仅启用星期一或在所有月份中启用星期一和星期日 我的日历视图 import java util ArrayList import
  • psycopg2.sql 发生了什么?

    在 psycopg2 文档中它引用了sql充满乐趣的财产safely构造 SQL 字符串 然而我在 python 3 上的安装 应该是 PyPI 的最新版本 不包含这样的属性 from psycopg2 import sql ImportE
  • 如何在 matplotlib 中的特定日期绘制垂直线[重复]

    这个问题在这里已经有答案了 如何在特定日期向该图表添加垂直线标记 Week end是日期列 fig ax plt subplots figsize 20 9 thirteen plot line x Week end y OFF color
  • 在 PowerShell 中如何将文件从远程 PSsession 复制到另一台 Windows 服务器

    我正在尝试将文件夹从一台远程服务器复制到 PSSession 内的另一台服务器 它给出了诸如访问被拒绝之类的错误 我对两台服务器都有管理员权限 如果我在没有 PSSession 的情况下尝试它 它会起作用 在远程服务器中 PS C User
  • 如何将变量放置在内存中给定的绝对地址处(使用 GCC)

    RealView ARM C 编译器supports使用变量属性将变量放置在给定的内存地址处at address int var attribute at 0x40001000 var 4 changes the memory locate
  • 屏幕关闭时如何获取传感器数据?

    我正在尝试创建一个应用程序 使用服务在一定时间内跟踪设备的方向 当方向改变时 设备会发出声音 只要设备处于开启状态 此功能就可以完美运行 一旦我锁定设备或屏幕关闭 我就听不到声音 我想要的 我的服务代码是 public class Raka
  • 如何从多个 $_POST 数组插入 MYSQL 行

    我有一个带有 添加联系人 部分的表单 单击该部分后 它会在表单中添加另一行 其中还有 3 个输入框 jfiddle上的代码段 http jsfiddle net fmdx cYxYP HTML
  • 如何从 Tkinter 获取输入

    我正在使用 Tkinter 制作一个程序 其中用户输入以磅为单位的体重 然后输出以公斤为单位的体重 我在获取内容时遇到问题Entry来自用户 我正在计算磅换算为公斤clicked1 有人可以告诉我如何在那里获得条目输入吗 from Tkin
  • 为什么我保存的 D3 选择在某些情况下没有效果?

    我对如何保存 D3 选择供以后使用感到困惑 在下面的代码中 我的轴有一个 全局 变量 首次创建它们时我将它们保存到该变量中 后来 我可以将此变量用于某些事情 此处 设置一些文本 但不能使用其他变量 此处 更新比例 这仅在我显式 重新 选择轴
  • conda 更新 CondaHTTPError:HTTP 无

    跑步中途Conda Update all 更新停滞了 多个软件包已更新 现在 当我跑步时conda update all or conda update conda 我得到这样的回应 C Users AppData Local Contin
  • 使用 Indy 10 和 DELPHI 评估电子邮件

    我使用以下代码来评估消息 使用 INDY 10 组件收到的电子邮件消息的内容 正文 行 function LinesFromMsg aMsg TIdMessage TStrings var i Integer begin for i 0 t
  • 关于Java基本类型方法的问题

    我对 Java 中的原始类型以及将一种类型转换为另一种类型的方法感到困惑 比如说 如果我有一个整数并且想将其转换为字符串 我需要使用 Integer 或 String 的静态方法 例如 String valueOf some integer
  • Ansible 中的列表按自然字母数字顺序排序

    有没有办法以自然的方式对 Ansible 或 Jinja 中的列表进行排序 例如 这是列表 test test123 test12 test5 test1234test test22te 我需要它来考虑整个数字而不是单个数字 所以test1
  • 对于简单且可变的产品,以特定的 html 结构显示一些数据

    在 WooCommerce 中 我想创建一个函数 为每个变体或可变产品输出一个简单的数据 列表 或者 如果是一个简单的产品 那么该产品本身的细节 我需要为每个项目添加的详细信息是 regular price size attribute 用