无法覆盖WooCommerce结帐字段

时间:2016-05-03 14:23:06

标签: php wordpress woocommerce checkout user-roles

我已经使用标有" 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' );

1 个答案:

答案 0 :(得分:0)

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' );

这应该适用于您的代码。