Таким образом, в основном то, что я сделал, это программно изменил цену так, что, если приходит клиент уровня 1, он автоматически вытягивает цену уровня 1 из вставленного пользовательского поля, а затем обрезает знак доллара. Как только это сделано, он меняет цену для человека, вошедшего в систему, без изменения базы данных. Тем не менее, я получаю ошибку «невозможно купить», когда я пытаюсь приобрести продукт. Я изменил продукт, чтобы сделать его покупаемым, и я обнаружил, что цена в корзине составляет 0,00 долларов США.
Вот мой код:
add_filter('woocommerce_get_price', 'custom_price_wanted', 10, 2);
function custom_price_wanted($price, $product) {
if (!is_user_logged_in()) return $price;
if (has_role_wanted('level_1_customers')){
$new_price = get_post_meta( get_the_ID(), '_level_1', true );
$new_price = trim($new_price,'$');
$price = $new_price;
}
if (has_role_wanted('level_2_customers')){
$new_price = get_post_meta( get_the_ID(), '_level_2', true );
$new_price = trim($new_price,'$');
$price = $new_price;
}
if (has_role_wanted('level_3_customers')){
$new_price = get_post_meta( get_the_ID(), '_level_3', true );
$new_price = trim($new_price,'$');
$price = $new_price;
}
return $price;
}
function has_role_wanted($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 );
}
РЕДАКТИРОВАТЬ: НАЙТИ НОМЕР !! Проблема заключается в get_post_meta (get_the_ID ()). В конечном итоге он получает идентификатор корзины, а не идентификатор продукта, поэтому он отображается как бесплатный.
Задача ещё не решена.
Других решений пока нет …