WooCommerce 在结帐时使用 Optgroup 选择下拉菜单

2023-12-11

我在用着WordPress 5.0.2 with WooCommerce 3.5.3我在结帐页面上创建了一个选择下拉菜单,效果很好,但是我想在其中添加一些选项组来组织选择选项

这是我的代码函数.php :

add_action('woocommerce_before_order_notes', 'add_select_checkout_field');
function add_select_checkout_field( $checkout ) {
  echo '<p>New Select Dropdown</p>';
  woocommerce_form_field( 'region', array(
      'type'          => 'select',
      'class'         => array( 'region-dropdown' ),
      'label'         => __( 'Select your region' ),
      'options'       => array(
          'region1'   => __( 'Region 1', 'woocommerce' ),
          'region2' => __( 'Region 2', 'woocommerce' ),
          'region3' => __( 'Region 3', 'woocommerce' ),
          'region4'   => __( 'Region 4', 'woocommerce' )
      )
 ),
  $checkout->get_value( 'region' ));
}

我想要的结果是这样输出的:

<select>
    <optgroup label="North Region">
        <option>Region 1</option>
        <option>Region 2</option>
    </optgroup>
    <optgroup label="South Region">
        <option>Region 3</option>
        <option>Region 4</option>
    </optgroup>
</select>

我不知道为什么 woocommerce 不实现此功能,但我希望有办法做到这一点。

任何帮助,将不胜感激


您可以通过两种方式做到这一点:

1) 启用<optgroup>在 Woocommerce 中选择表单字段,您可以从 GitHub 使用:

  • 这个新的新鲜话题:lomars - Woocommerce 选择带有选项组的表单字段

  • 这个旧线程:QWp6t - 将 optgroup 支持添加到 WooCommerce 选择表单字段

2)启用<optgoup>手动在选择字段中,例如:

add_action('woocommerce_before_order_notes', 'custom_checkout_select_field_with_optgroup', 10, 1 );
function custom_checkout_select_field_with_optgroup( $checkout ) {
    $domain  = 'woocommerce';
    $title   = __("Region", $domain);
    $slug    = sanitize_title($title);
    $default = __("Select your region", $domain);
    $value   = $checkout->get_value($slug);

    // Region option data array with optgroup
    $options = array(
        __("North Region", $domain) => array(
            'region1' => __("Region 1", $domain),
            'region2' => __("Region 2", $domain),
        ),
        __("South Region", $domain) => array(
            'region3' => __("Region 3", $domain),
            'region4' => __("Region 4", $domain),
        )
    );

    // The field
    echo '<p class="form-row form-row-wide '.$slug.'-dropdown" id="'.$slug.'_field" data-priority="">
    <label for="'.$slug.'" class="">'.$title.'</label>
    <span class="woocommerce-input-wrapper">
    <select name="'.$slug.'" id="'.$slug.'" class="select " data-placeholder="" autocomplete="'.$slug.'">
    <option value="">'.$default.'</option>';

    // Loop through "optgroup"
    foreach( $options as $optgroup_label => $optgroup_options ) {
        echo '<optgroup label="'.$optgroup_label.'">';
        // Loop through "options" in the "optgroup"
        foreach( $optgroup_options as $key => $label ) {
            $selected = $value === $key ? ' selected="selected"': '';
            echo '<option value="'.$key.'"'.$selected.'>'.$label.'</option>';
        }
        echo '</optgroup>';
    }

    echo '</select></span></p>';
}

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

enter image description here


相关主题:在 Woocommerce Checkout 中的帐单国家/地区下方添加自定义字段

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

WooCommerce 在结帐时使用 Optgroup 选择下拉菜单 的相关文章

  • 使用正则表达式提取两个短语之间的所有单词[重复]

    这个问题在这里已经有答案了 我正在尝试使用以下正则表达式提取两个短语之间的所有单词 b item W w W 0 2 1 one W w W 0 3 business b b item W w W 0 2 3 three W w W 0 3
  • ini_set 'session.gc_maxlifetime' 为 1 天

    If I do ini set session gc maxlifetime 86400 这是否意味着用户可以将浏览器留在同一页面 非活动状态 最多 1 天 而不必担心会话被垃圾收集并被注销 如果服务器配置不支持此功能会发生什么 它会给我一
  • Magento - 自定义支付模块

    这是一个非常普遍的问题 但这里是 我正在尝试在 Magento 中创建一个自定义支付模块 我创建了一个 常规 模块 可以连接到 Magento 事件 观察者模型 但是我如何告诉 Magento 将模块视为支付模块 以便它显示在管理后端和结账
  • post php mysql 的拆分关键字

    我有一个表存储帖子 ID 它的标签如下 Post id Tags 1 keyword1 keyword2 keyword3 我想循环遍历该表中的每一行并执行以下操作 将关键字1 关键字2 关键字3放入新表中 word id word val
  • 对具有混合类型值的数组进行数字排序

    我有一个像这样的混合数组 fruits array lemon Lemon 20 banana apple 121 40 50 然后申请sort 其功能如下 sort fruits SORT NUMERIC foreach fruits a
  • PHP 如何再次传输 mp3 流

    我正在尝试从 http 的无线电流 MP3 获取数据 并希望以 https 的形式将其流式传输 这是我尝试过的
  • 根据用户角色将帖子状态更改为待处理

    我有会员网站 用户必须付费才能订阅 当用户订阅时 他的角色变为 成员 现在可以发布到名为 用户配置文件 的自定义帖子类型 我想要做的是将所有已发布帖子的状态更改为该帖子类型中的待处理 例如 如果用户角色更改为 已过期 我尝试了这个 但似乎没
  • 我可以使用 WGET 生成给定 URL 的网站的站点地图吗?

    我需要一个可以抓取网站并以纯文本或类似格式返回所有已抓取页面的列表的脚本 我将把它作为站点地图提交给搜索引擎 我可以使用 WGET 生成网站的站点地图吗 或者有没有一个 PHP 脚本可以做同样的事情 wget spider recursiv
  • 基于mysql表中唯一电子邮件地址的唯一代码?

    我有一个 mysql 表 它将存储用户电子邮件地址 每个地址都是唯一的 并且是主字段 和时间戳 我添加了另一列名为 unique code varchar 64 utf8 unicode ci 我非常感谢您提供的帮助 a 生成5位字母数字代
  • laravel 中的 jwt 中的“无法从请求中解析令牌”

    我面临着 无法从请求中解析令牌 Laravel 中的 JWT 错误 我在 localhost Windows 7 中的 Xampp 中尝试了相同的代码 它正在工作 但在服务器上它不起作用 我已经通过了 授权 标头中的令牌也发生了变化 hta
  • PHP表单提交后如何显示成功消息?

    这是代码 我想要这样 表单提交 gt page2 php gt 重定向 gt page1 php 这是消息 弹出窗口或其他内容 page1 php
  • 如何在wordpress中提交表单

    我正在使用 WordPress 3 3 1twentyten theme 我创建了一个插件来创建自定义表单 我已经在 WordPress 中成功安装了这个 我的插件文件代码如下
  • Joomla getUser() 不显示更新的用户数据

    下面的代码允许我在用户的 Joomla 个人资料的个人资料页面中显示用户名 鉴于我已经覆盖了模板以获得我想要的外观和感觉 user JFactory getUser if user gt guest echo You are logged
  • 如何使用具有比较标准的 findBy 方法

    我需要使用使用比较标准 不仅仅是精确标准 的 神奇查找器 findBy 方法 换句话说 我需要做这样的事情 result purchases repository gt findBy array prize gt gt 200 这样我就可以
  • CodeIgniter PHP 模型访问“无法找到您指定的模型”

    我一直在尝试为我正在构建的这个网站加载一些模型 但不知道什么原因 会带来如下错误 An Error Was Encountered Unable to locate the model you have specified logon mo
  • 是否可以在 php.ini 中指示 PHP 使用 postfix 配置?

    是否可以配置 PHP 使用 postfix 的配置集发送电子邮件 WordPress 通过 PHPMailer 依赖于 php ini 中的这些设置是否正确 SMTP localhost http php net smtp port smt
  • 是否可以从插件扩展 Wordpress XMLRPC 接口?

    是否可以创建一个插件 在激活时向 XMLRPC 接口添加新的 功能 并处理其调用 简而言之 是的 您可以将函数添加为插件或添加到主题的functions php 文件中来处理XMLRPC 调用 您将需要以下部分 function xml a
  • 依赖注入容器什么时候会变得太大,我该怎么办?

    我们都知道为什么依赖注入很棒因为它使代码耦合更少 更容易测试 并且更容易阅读 然后有些人决定使用依赖注入容器 like pimple http pimple sensiolabs org PHP 可以协助依赖倒置 http en wikip
  • 对文本变量进行数学求和? (例如 5865/100 )

    我有一个变量是 whatever 5865 100 这是一个文本变量 我希望它计算 5865 100 以便我可以将其添加到其他数字并进行计算 Number format 不起作用 因为它只返回 5 865 而我希望它返回 58 65 我可以
  • 如何使用 Mockery 在第 N 次调用模拟方法时抛出异常

    我需要测试我编写的某些代码多次调用另一个类上的方法时的行为 其中一次调用将导致抛出异常 我在用Mockery http docs mockery io模拟可能引发异常的类 因此 就我而言 该方法将被调用三次 我需要它在第二次抛出异常 这是我

随机推荐