将自定义字段价格作为产品价格分配给 WooCommerce 中的特定用户角色

我创建了一个名为“批发商”的新角色。该角色按预期工作。


我还创建了一个名为“批发商价格”的自定义价格字段。它也按预期工作。


我检查用户角色,如果他们被分配为批发商,我给他们定制产品价格(如果已填写)。除了我无法弄清楚最后一块,我一切正常。如何拉取当前产品ID,获取批发价,并分配。我的 functions.php 代码如下:


/* Custom user roles */

add_role( 'wholesaler', 'Wholesaler', get_role( 'customer' )->capabilities );


add_action( 'woocommerce_product_options_pricing', 'action_woocommerce_product_options_pricing', 10, 0 );


/* Add custom wholesaler price field to general page */

function action_woocommerce_product_options_pricing() { 

    woocommerce_wp_text_input( array(

        'id' => 'wholesaler_price', 

        'class' => 'wc_input_price short', 

        'label' => __( 'Wholesaler price', 'woocommerce' ) . ' (' . get_woocommerce_currency_symbol() . ')',

    ) );

}


// Save Fields

function action_woocommerce_admin_process_product_object( $product ) {

    if( isset($_POST['wholesaler_price']) ) {

        $product->update_meta_data( 'wholesaler_price', sanitize_text_field( $_POST[ 'wholesaler_price'] ) );

    }

}

add_action( 'woocommerce_admin_process_product_object', 'action_woocommerce_admin_process_product_object', 10, 1 );


/* Custom prices by user role */

add_filter('woocommerce_get_price', 'custom_price_assign', 10, 2);


function custom_price_assign($price, $product) {

    if (!is_user_logged_in()) return $price;


        // Check if the user has a role of wholesaler

        if (check_user_role('wholesaler')){

            $price = $price; // Assign wholesale price for product (if it is set for that product)

        }


    return $price;

}


/* Check user role */

function check_user_role($role = '',$user_id = null){

    if ( is_numeric( $user_id ) )

        $user = get_user_by( 'id',$user_id );

    else

        $user = wp_get_current_user();


    if ( empty( $user ) )

        return false;


    return in_array( $role, (array) $user->roles );

}

我可以给批发商一个固定百分比的报价,但这不是我的目标。


翻翻过去那场雪
浏览 114回答 1
1回答

素胚勾勒不出你

你不需要你的功能check_user_role(),因为你可以用同样的方式使用 WordPress current_user_can()。自 WooCommerce 3 以来,该挂钩也woocommerce_get_price已弃用。要获得自定义批发商价格,您只需使用元键,wholesaler_price例如:1) 使用对象get_meta()上的方法(自 WooCommerce 3 起):WC_Product$price = (float) $product->get_meta( 'wholesaler_price' );get_post_meta()2) 或者在功能中使用产品 ID (WordPress 旧方法):$price = (float) get_post_meta( $product->get_id()  'wholesaler_price', true );现在在你相关的钩子代码函数中:/* Custom prices by user role */add_filter('woocommerce_product_get_price', 'custom_price_assign', 10, 2);add_filter('woocommerce_product_variation_get_price', 'custom_price_assign', 10, 2); // For product variations (optional)function custom_price_assign( $price, $product ) {    // Check if the user has a role of wholesaler    if ( current_user_can('wholesaler') && $wholesaler_price = $product->get_meta('wholesaler_price') ){        return $wholesaler_price;    }    return $price;}代码进入您的活动子主题(或活动主题)的 functions.php 文件。测试和工作。
打开App,查看更多内容
随时随地看视频慕课网APP