无法覆盖 WooCommerce 结帐字段
Unable to Override WooCommerce Checkout Fields
我使用标记为 "po_number" 的 Woothemes 结帐字段编辑器创建了一个自定义 WooCommerce 结帐字段。我希望 PO 编号结帐字段仅针对用户角色 "distributor" 显示。
到目前为止,我未能成功覆盖结帐字段。我正在使用 Wordpress 4.5.1 / Woocommerce 2.5.5。这是我放在子主题 functions.php
中的代码。我还进行了测试以确保这不是主题冲突。
非常感谢任何帮助。
这是我的代码:
function custom_override_checkout_fields( $fields ) {
if ( ! current_user_can( 'distributor' ) && isset( $fields['billing']['po_number'] ) ) {
unset($fields['billing']['po_number']);
}
return $fields;
}
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
current_user_can()
功能与用户角色的能力有关,但不检测用户角色本身。因此,在您的代码中不起作用。
您需要为此设置一个条件函数(用户角色):
function is_user_role( $role, $user_id = null ) {
if ( is_numeric( $user_id ) ) {
$user = get_userdata( $user_id );
} else {
$user = wp_get_current_user();
}
if ( empty( $user ) ) {
return false;
}
if ( in_array( $role, (array) $user->roles ) == 1) {
return true;
} else {
return false;
}
}
然后在您的代码中您可以使用该函数:
function custom_override_checkout_fields( $fields ) {
if ( !is_user_role( 'distributor' ) && isset( $fields['billing']['po_number'] ) ) {
unset($fields['billing']['po_number']);
}
return $fields;
}
add_filter( 'woocommerce_checkout_fields', 'custom_override_checkout_fields' );
这应该适用于您的代码。
我使用标记为 "po_number" 的 Woothemes 结帐字段编辑器创建了一个自定义 WooCommerce 结帐字段。我希望 PO 编号结帐字段仅针对用户角色 "distributor" 显示。
到目前为止,我未能成功覆盖结帐字段。我正在使用 Wordpress 4.5.1 / Woocommerce 2.5.5。这是我放在子主题 functions.php
中的代码。我还进行了测试以确保这不是主题冲突。
非常感谢任何帮助。
这是我的代码:
function custom_override_checkout_fields( $fields ) {
if ( ! current_user_can( 'distributor' ) && isset( $fields['billing']['po_number'] ) ) {
unset($fields['billing']['po_number']);
}
return $fields;
}
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
current_user_can()
功能与用户角色的能力有关,但不检测用户角色本身。因此,在您的代码中不起作用。
您需要为此设置一个条件函数(用户角色):
function is_user_role( $role, $user_id = null ) {
if ( is_numeric( $user_id ) ) {
$user = get_userdata( $user_id );
} else {
$user = wp_get_current_user();
}
if ( empty( $user ) ) {
return false;
}
if ( in_array( $role, (array) $user->roles ) == 1) {
return true;
} else {
return false;
}
}
然后在您的代码中您可以使用该函数:
function custom_override_checkout_fields( $fields ) {
if ( !is_user_role( 'distributor' ) && isset( $fields['billing']['po_number'] ) ) {
unset($fields['billing']['po_number']);
}
return $fields;
}
add_filter( 'woocommerce_checkout_fields', 'custom_override_checkout_fields' );
这应该适用于您的代码。