为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
翻翻过去那场雪 2023-06-18 16:23:54
我创建了一个名为“批发商”的新角色。该角色按预期工作。我还创建了一个名为“批发商价格”的自定义价格字段。它也按预期工作。我检查用户角色,如果他们被分配为批发商,我给他们定制产品价格(如果已填写)。除了我无法弄清楚最后一块,我一切正常。如何拉取当前产品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 Fieldsfunction 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 );}我可以给批发商一个固定百分比的报价,但这不是我的目标。
查看完整描述

1 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

你不需要你的功能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 文件。测试和工作。


查看完整回答
反对 回复 2023-06-18
  • 1 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信