Anonymous
Простой продукт — изменения цен в зависимости от роли пользователя
Сообщение
Anonymous » 15 янв 2025, 15:32
В настоящее время у меня есть специальные цены, основанные на ролях пользователей, настроенных для работы с различными продуктами.
[img]https: //i.sstatic.net/53Cker1H.png[/img]
И вот код, который я использую, чтобы это работало:
Код: Выделить всё
// Add custom fields to variations option pricing
add_action( 'woocommerce_variation_options_pricing', 'add_variation_options_pricing', 20, 3 );
function add_variation_options_pricing( $loop, $variation_data, $post_variation )
{
$value1 = get_post_meta( $post_variation->ID, '_food_price', true );
$value2 = get_post_meta( $post_variation->ID, '_hot_food_price', true );
$value3 = get_post_meta( $post_variation->ID, '_general_price', true );
$symbol = ' (' . get_woocommerce_currency_symbol() . ')';
$key_1 = '_food_price[' . $loop . ']';
$key_2 = '_hot_food_price[' . $loop . ']';
$key_3 = '_general_price[' . $loop . ']';
// General
echo '
' . __( "General", "woocommerce" ) . $symbol . '
';
// Food
echo '
' . __( "Food", "woocommerce" ) . $symbol . '
';
// Hot Food
echo '
' . __( "Hot Food", "woocommerce" ) . $symbol . '
';
}
// Save variations prices custom fields values
add_action( 'woocommerce_save_product_variation', 'save_product_variation_price', 20, 2 );
function save_product_variation_price( $variation_id, $i )
{
if ( isset( $_POST['_food_price'][$i] ) )
{
update_post_meta( $variation_id, '_food_price', floatval( $_POST['_food_price'][$i] ) );
}
if ( isset( $_POST['_hot_food_price'][$i] ) )
{
update_post_meta( $variation_id, '_hot_food_price', floatval( $_POST['_hot_food_price'][$i] ) );
}
if ( isset( $_POST['_general_price'][$i] ) )
{
update_post_meta( $variation_id, '_general_price', floatval( $_POST['_general_price'][$i] ) );
}
}
// Variable product price range
add_filter('woocommerce_variation_prices_price', 'variation_price', 900, 2 );
// Product variations (of a variable product)
add_filter('woocommerce_product_variation_get_price', 'variation_price', 900, 2 );
function variation_price( $price, $object )
{
if( is_user_logged_in() ) {
// Hot Food User
if ( current_user_can( 'stallholder') && current_user_can( 'hot_food' ) ) {
$new_price = (float) get_post_meta( $object->get_id(), '_hot_food_price', true );
$price = empty($new_price) ? $price : $new_price;
}
// Food User
elseif ( current_user_can( 'stallholder') && current_user_can( 'food' ) ){
$new_price = (float) get_post_meta( $object->get_id(), '_food_price', true );
$price = empty($new_price) ? $price : $new_price;
}
// General User
else {
$new_price = (float) get_post_meta( $object->get_id(), '_general_price', true );
$price = empty($new_price) ? $price : $new_price;
}
}
return $price;
}
Теперь я хочу сделать то же самое для простых продуктов и добавить сюда эти поля.
Я пытался найти эти поля там, где они мне нужны. идти, но ничего не получилось.
Любая помощь принимается с благодарностью. Спасибо.
Подробнее здесь:
https://stackoverflow.com/questions/793 ... -user-role
1736944363
Anonymous
В настоящее время у меня есть специальные цены, основанные на ролях пользователей, настроенных для работы с различными продуктами. [img]https: //i.sstatic.net/53Cker1H.png[/img] И вот код, который я использую, чтобы это работало: [code] // Add custom fields to variations option pricing add_action( 'woocommerce_variation_options_pricing', 'add_variation_options_pricing', 20, 3 ); function add_variation_options_pricing( $loop, $variation_data, $post_variation ) { $value1 = get_post_meta( $post_variation->ID, '_food_price', true ); $value2 = get_post_meta( $post_variation->ID, '_hot_food_price', true ); $value3 = get_post_meta( $post_variation->ID, '_general_price', true ); $symbol = ' (' . get_woocommerce_currency_symbol() . ')'; $key_1 = '_food_price[' . $loop . ']'; $key_2 = '_hot_food_price[' . $loop . ']'; $key_3 = '_general_price[' . $loop . ']'; // General echo ' ' . __( "General", "woocommerce" ) . $symbol . ' '; // Food echo ' ' . __( "Food", "woocommerce" ) . $symbol . ' '; // Hot Food echo ' ' . __( "Hot Food", "woocommerce" ) . $symbol . ' '; } // Save variations prices custom fields values add_action( 'woocommerce_save_product_variation', 'save_product_variation_price', 20, 2 ); function save_product_variation_price( $variation_id, $i ) { if ( isset( $_POST['_food_price'][$i] ) ) { update_post_meta( $variation_id, '_food_price', floatval( $_POST['_food_price'][$i] ) ); } if ( isset( $_POST['_hot_food_price'][$i] ) ) { update_post_meta( $variation_id, '_hot_food_price', floatval( $_POST['_hot_food_price'][$i] ) ); } if ( isset( $_POST['_general_price'][$i] ) ) { update_post_meta( $variation_id, '_general_price', floatval( $_POST['_general_price'][$i] ) ); } } // Variable product price range add_filter('woocommerce_variation_prices_price', 'variation_price', 900, 2 ); // Product variations (of a variable product) add_filter('woocommerce_product_variation_get_price', 'variation_price', 900, 2 ); function variation_price( $price, $object ) { if( is_user_logged_in() ) { // Hot Food User if ( current_user_can( 'stallholder') && current_user_can( 'hot_food' ) ) { $new_price = (float) get_post_meta( $object->get_id(), '_hot_food_price', true ); $price = empty($new_price) ? $price : $new_price; } // Food User elseif ( current_user_can( 'stallholder') && current_user_can( 'food' ) ){ $new_price = (float) get_post_meta( $object->get_id(), '_food_price', true ); $price = empty($new_price) ? $price : $new_price; } // General User else { $new_price = (float) get_post_meta( $object->get_id(), '_general_price', true ); $price = empty($new_price) ? $price : $new_price; } } return $price; } [/code] Теперь я хочу сделать то же самое для простых продуктов и добавить сюда эти поля. [img]https://i.sstatic.net/YFeew7hx.png[/img] Я пытался найти эти поля там, где они мне нужны. идти, но ничего не получилось. Любая помощь принимается с благодарностью. Спасибо. Подробнее здесь: [url]https://stackoverflow.com/questions/79358224/simple-product-pricing-variations-based-on-user-role[/url]