WooCommerce:如何在ADMIN新订单部分中要求状态下拉框

问题描述 投票:1回答:1

我试图在“创建新订单”表单内的WooCommerce的“管理”区域中要求几个字段。我已经成功地解决了如何为“状态”下拉菜单以外的所有字段执行此操作。这是到目前为止我所拥有的(所有这些代码都正常运行):

// Require certain fields in NEW ORDER creation via Admin
add_filter('woocommerce_admin_billing_fields', 'woocommerce_require_admin_billing_fields');
function woocommerce_require_admin_billing_fields( $fields ){
    $fields['first_name']['custom_attributes'] = array( 'required' => '1' );
    $fields['last_name']['custom_attributes'] = array( 'required' => '1' );
    $fields['address_1']['custom_attributes'] = array( 'required' => '1' );
    $fields['city']['custom_attributes'] = array( 'required' => '1' );
    $fields['postcode']['custom_attributes'] = array( 'required' => '1' );
    $fields['country']['custom_attributes'] = array( 'required' => '1' ); 
    $fields['email']['custom_attributes'] = array( 'required' => '1' );
    $fields['phone']['custom_attributes'] = array( 'required' => '1' );
    return $fields;
}
add_filter('woocommerce_admin_shipping_fields', 'woocommerce_require_admin_shipping_fields');
function woocommerce_require_admin_shipping_fields( $fields ){
    $fields['address_1']['custom_attributes'] = array( 'required' => '1' );
    $fields['city']['custom_attributes'] = array( 'required' => '1' );
    $fields['postcode']['custom_attributes'] = array( 'required' => '1' );
    $fields['country']['custom_attributes'] = array( 'required' => '1' );
    $fields['state']['custom_attributes'] = array( 'required' => '1' );
    return $fields;
}
// Require fields that are not included in woocommerce_admin loops
function vic_require_admin_fields() {
     echo '<script>document.getElementById("excerpt").setAttribute("required", "1")</script>';              // order notes (excerpt)
     echo '<script>document.getElementById("_payment_method").setAttribute("required", "1")</script>';      // payment method
 }
 add_action( 'woocommerce_admin_order_data_after_shipping_address', 'vic_require_admin_fields' );

[我试图以与其余方法类似的方式要求“状态”下拉字段(通过针对“状态” id的过滤器),并且我也尝试使用javascript操作来定位它,但是这两种努力都产生了没有解决方案。看起来是通过boostrap下拉菜单构造表单的方式吗?实际标签设置为显示:无,因此我不能做太多事情。

[我可以看到,当我选择一个没有状态的选择时,SELECT字段变成了INPUT字段,这就是为什么我无法将其定位为添加必需属性的原因:

enter image description here

如果我不能使用过滤器,可以的。我想我可能需要在按钮上附加一些javascript以进行表单验证?为了通过javascript进行验证,我似乎找不到实际的表单ID,尽管我今晚回家后可能会看更多。

任何帮助我找到解决方案的想法,将不胜感激!

woocommerce
1个回答
0
投票

我已经搜索了一段时间,但不幸的是没有结果。

我将显示内容全部转换为通过jQuery阻止,并将其应用于#_billing_state ID。用于输入字段和选择的ID,也通过jQuery添加了“必需”。

这最初是可行的,但是即使在页脚中应用了js代码,也可以“单击”“铅笔”来编辑帐单字段,所应用的jQuery会神奇地消失。

到目前为止没有结果

function add_js() {
    ?>
    <script type="text/javascript">
        jQuery(document).ready(function ($) {
            console.log('JS works!');

            $('#_billing_state').css( 'display', 'block' );
            $('#_billing_state').prop( 'required', true );

        });
    </script>
    <?php
}
add_action( 'admin_footer', 'add_js' );

更新

最有可能不是您想要的,但也许是解决方案?

// Require certain fields in NEW ORDER creation via Admin
add_filter('woocommerce_admin_billing_fields', 'woocommerce_require_admin_billing_fields');
function woocommerce_require_admin_billing_fields( $fields ){
    //echo '<pre> 1 = ' , print_r($fields, 1), '</pre>';

    $fields['first_name']['custom_attributes'] = array( 'required' => '1' );
    $fields['last_name']['custom_attributes'] = array( 'required' => '1' );
    $fields['address_1']['custom_attributes'] = array( 'required' => '1' );
    $fields['city']['custom_attributes'] = array( 'required' => '1' );
    $fields['postcode']['custom_attributes'] = array( 'required' => '1' );
    $fields['country']['custom_attributes'] = array( 'required' => '1' );
    $fields['state']['custom_attributes'] = array( 'required' => '1' );

    // original: js_field-state select short (remove the js_field-state class)
    $fields['state']['class'] = 'select short'; 
    $fields['email']['custom_attributes'] = array( 'required' => '1' );
    $fields['phone']['custom_attributes'] = array( 'required' => '1' );

    //echo '<pre> 2 = ' , print_r($fields, 1), '</pre>';
    return $fields;
}
© www.soinside.com 2019 - 2024. All rights reserved.