我编辑问题
我应该怎么做才能重新排序根据我的需要创建的新结帐字段?
我应该怎么做才能让这些字段根据他们的角色只显示给某些用户?
仅向某些用户角色显示此新字段很重要
感谢本网站的另一位用户@MartinMirchev 的合作,他为我提供了文档供我审查,我已经设法将问题隔离开来。
新字段不是重新排序,而是重复的,显示在底部,电子邮件地址字段之后,以及“运送到不同的地址?”复选框。
我创建的新字段显示在我用代码优先级指示的位置,但它只显示条目,占位符或我分配给它的标签未显示(NIF/CIF:) 要重新排序,我使用下面的第二个代码片段。
我在这些功能中做错了什么?
我在公司 NIF 的 woocommerce 结帐中有一个新字段。以下函数创建字段并将其显示在表单上。
/* show the new field on the checkout page */
add_action( 'woocommerce_before_order_notes', 'bbloomer_add_custom_checkout_field' );
function bbloomer_add_custom_checkout_field( $checkout ) {
$current_user = wp_get_current_user();
$saved_license_no = $current_user->license_no;
woocommerce_form_field( 'license_no', array(
'type' => 'text',
'class' => array( 'form-row-wide' ),
'label' => 'NIF/CIF',
'placeholder' => 'B12345678',
'required' => true,
'default' => $saved_license_no,
), $checkout->get_value( 'license_no' ) );
}
/* make sure the new field is not empty */
add_action( 'woocommerce_checkout_process', 'bbloomer_validate_new_checkout_field' );
function bbloomer_validate_new_checkout_field() {
if ( ! $_POST['license_no'] ) {
wc_add_notice( 'Por favor ingrese su número de NIF', 'error' );
}
}
/* save the new field and show it in email, checkout, etc ...*/
add_action( 'woocommerce_checkout_update_order_meta', 'bbloomer_save_new_checkout_field' );
function bbloomer_save_new_checkout_field( $order_id ) {
if ( $_POST['license_no'] ) update_post_meta( $order_id, '_license_no', esc_attr( $_POST['license_no'] ) );
}
add_action( 'woocommerce_thankyou', 'bbloomer_show_new_checkout_field_thankyou' );
function bbloomer_show_new_checkout_field_thankyou( $order_id ) {
if ( get_post_meta( $order_id, '_license_no', true ) ) echo '<p><strong>NIF/CIF:</strong> ' . get_post_meta( $order_id, '_license_no', true ) . '</p>';
}
add_action( 'woocommerce_admin_order_data_after_billing_address', 'bbloomer_show_new_checkout_field_order' );
function bbloomer_show_new_checkout_field_order( $order ) {
$order_id = $order->get_id();
if ( get_post_meta( $order_id, '_license_no', true ) ) echo '<p><strong>NIF/CIF:</strong> ' . get_post_meta( $order_id, '_license_no', true ) . '</p>';
}
add_action( 'woocommerce_email_after_order_table', 'bbloomer_show_new_checkout_field_emails', 20, 4 );
function bbloomer_show_new_checkout_field_emails( $order, $sent_to_admin, $plain_text, $email ) {
if ( get_post_meta( $order->get_id(), '_license_no', true ) ) echo '<p><strong>NIF/CIF:</strong> ' . get_post_meta( $order->get_id(), '_license_no', true ) . '</p>';
}
下面我展示了重新排序表单字段的功能。默认情况下,新字段显示在表单底部。 当然,这些功能适用于其他用户,并且任何人都可以使用,如“Business Bloomer”教程和文章中所示
在这里您会找到更多功能,我从中找到灵感重新排序付款表单字段 使用此功能,我正在更改优先级,它应该将新字段 (NIF/CIF) 放在“公司名称(可选)”字段下方。
add_filter( 'woocommerce_default_address_fields', 'bbloomer_reorder_checkout_fields' );
function bbloomer_reorder_checkout_fields( $fields ) {
// default priorities:
// 'first_name' - 10
// 'last_name' - 20
// 'company' - 30
// 'country' - 40
// 'address_1' - 50
// 'address_2' - 60
// 'city' - 70
// 'state' - 80
// 'postcode' - 90
// e.g. move 'company' above 'first_name':
// just assign priority less than 10
$fields['license_no']['priority'] = 35;
return $fields;
}
位置没有变化,是重复的,但是在我需要新字段的顶部,只显示了输入抽屉,没有显示NIF/CIF标签,也没有显示占位符。
我需要在功能中更正什么才能完美显示所有内容?
我应该怎么做才能让我创建的这个字段只显示给某些用户?
我应该在功能中更正什么才能完美显示所有内容?