【问题标题】:Unable to Override WooCommerce Checkout Fields无法覆盖 WooCommerce 结帐字段
【发布时间】:2016-08-28 15:48:27
【问题描述】:

我使用标记为“po_number”的 Woothemes 结帐字段编辑器创建了一个自定义 WooCommerce 结帐字段。我希望 PO 编号结帐字段仅显示用户角色“分销商”。

到目前为止,我未能成功覆盖结帐字段。我正在使用 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' );

【问题讨论】:

    标签: php wordpress woocommerce checkout user-roles


    【解决方案1】:

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

    这应该可以在您的代码中使用。

    【讨论】:

      猜你喜欢
      • 2015-04-20
      • 1970-01-01
      • 2013-10-21
      • 2018-01-08
      • 1970-01-01
      • 2018-12-20
      • 1970-01-01
      • 2023-04-10
      • 2017-09-04
      相关资源
      最近更新 更多