当前位置: 首页 > 知识库问答 >
问题:

在WooCommerce中添加自定义结账多选字段并更新订单元

计和顺
2023-03-14

我正在为一个自定义的woocommerce结帐表单的多选字段而挣扎。

我通过函数创建了自定义multislect字段:

add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );

function custom_override_checkout_fields( $fields ) { 
     $fields['billing']['_myfield'] = array(
        'type'      => 'select',
        'id' => '_myfield',
        'label'     => __('My Field', 'woocommerce'),
        'required'  => true,
        'class'     => array('form-row-wide'),
        'clear'     => true,
        'options'       => [
            'key1'  => __('First Item', 'woocommerce'),
            'key2'  => __('Second Item', 'woocommerce'),
            'key3'  => __('Third Item', 'woocommerce'),
            'key4'  => __('Fourth Item', 'woocommerce')
        ]
    );
    return $fields;
}

请注意,woocommerce函数custom\u override\u checkout\u fields无法创建自定义多选字段,因此这里有一个简单的选择字段。

我决定使用jQuery以这种方式添加多个缺失的属性:

$('#_myfield').attr('multiple', 'multiple');

现在我有了multiselect字段,它看起来像:

<select name="_myfield" id="_myfield" class="select " data-placeholder="" multiple="multiple">...</select>

问题是,顺序元值没有正确更新,它每次只显示一个值,而不是一个数组的值,如果人选择一个以上的选项。

我使用这个函数来更新订单的元值:

add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta');

function my_custom_checkout_field_update_order_meta($order_id) {
   update_post_meta($order_id, '_myfield', $_POST['_myfield'] );
}

有什么帮助吗?

也许有更好的解决方案在结帐的账单部分创建多选字段?

共有1个答案

濮阳功
2023-03-14

以下是创建自定义多选择签出字段并获取订单元数据中所选值的正确方法。

所有jQuery代码都包含在函数中,因此您必须删除自己的代码。

我添加了一个隐藏的输入字段,在其中我用jQuery抓取选定的值。当下单时,我从这个隐藏的输入字段中保存数据。

代码:

add_filter( 'woocommerce_checkout_fields' , 'custom_checkout_fields', 30, 1 );
function custom_checkout_fields ( $fields ) {
    $domain = 'woocommerce';

    $fields['billing']['multi_my_field'] = array(
        'label'        => __('My Field', 'woocommerce'),
        'required'     => true,
        'class'        => array('form-row-wide'),
        'clear'        => true,
        'autocomplete' => false,
        'type'         => 'select',
        'options'      => array(
            'key1'  => __('First Item', $domain),
            'key2'  => __('Second Item', $domain),
            'key3'  => __('Third Item', $domain),
            'key4'  => __('Fourth Item', $domain),
        ),
    );
    ?>
    <input type="hidden"  name="billing_my_field" id="billing_my_field" value="0">
    <script type='text/javascript'>
        jQuery(function($){
            var a = 'select[name="multi_my_field"]',
                b = 'input[name="billing_my_field"]';
            $(a).attr('multiple', 'multiple');
            $(a).change( function(){
                $(b).val($(this).val());
            })
        });
    </script>
    <?php
    return $fields;
}

add_action( 'woocommerce_checkout_update_order_meta', 'hidden_checkout_field_update_order_meta', 30, 1 );
function hidden_checkout_field_update_order_meta ( $order_id ) {
    if( isset( $_POST['billing_my_field'] ) )
        update_post_meta($order_id, '_billing_my_field', esc_attr( $_POST['billing_my_field'] ) );
}

代码进入函数。活动子主题(或主题)的php文件。

测试和工作

 类似资料:
  • 我正试图在结帐时将定制费用计入订单总额。我在woocommerce中添加了一个复选框 包含一个自定义js文件,可用于处理事件 和一个php费用处理函数 由于某些原因,$_POST['state']的值没有被添加,当我给出一个硬编码值时,函数会工作,我尝试了很多选项,但无法让它工作。 我看过类似的帖子,但没有一个有答案。

  • 简言之: 我想在“daypart”上显示一个新字段。这是一个具有3个选项的下拉字段 其他信息: 我需要将daypart保存在core签出字段中,因为商店会同步到另一个不同步订单元数据的配送服务。 这是代码:

  • 使用以下代码,我可以在WooCommerce产品上获得一个自定义字段,但是如何在订单、结帐和管理订单(后端)上显示它呢? 这是我在每个产品上的自定义字段 这是我的管理订单(后端)详细信息。我尝试显示我在每个产品帖子中输入的正确元数据。 如何在管理订单中显示我在自定义字段中输入的值?我也希望有人能帮助我显示在订单和结帐页面的元。。。或者引导我走向正确的方向。我意识到,为了在管理订单中显示它,我必须确

  • WooCommerce自定义结账字段的插件有Custom Checkout Fields for WooCommerce等,如果你想要更多的自由,就用代码来解决吧。本文介绍一种用代码来自定义WooCommerce结账字段的方法。 WooCommerce自定义结账字段代码 代码单独保存一个文件引入,或直接放到子主题的functions.php中,第二种方式请将 defined('WPINC') or

  • 我在使用一个定制的结帐字段时遇到了困难,该字段在第一次订购时可用,但在同一客户的连续订单中不会出现。 简而言之,我有一个自定义字段,它是一个卡号。在客户注册时,询问客户是否想要购买购物卡。如果客户标记该选项,则会将一个带有“y”的字段添加到user_meta表中。然后店主将通过电子邮件向客户发送卡号。 客户第一次下单时,在结账页面中会出现卡号自定义字段:客户必须添加商店获得的卡号。然后,订单与卡号