我试图在“创建新订单”表单内的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字段,这就是为什么我无法将其定位为添加必需属性的原因:
如果我不能使用过滤器,可以的。我想我可能需要在按钮上附加一些javascript以进行表单验证?为了通过javascript进行验证,我似乎找不到实际的表单ID,尽管我今晚回家后可能会看更多。
任何帮助我找到解决方案的想法,将不胜感激!
我已经搜索了一段时间,但不幸的是没有结果。
我将显示内容全部转换为通过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;
}