Woocommerce переопределяет цену продукта с помощью индивидуального значения в корзине и при оформлении заказаPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Woocommerce переопределяет цену продукта с помощью индивидуального значения в корзине и при оформлении заказа

Сообщение Anonymous »

Мне было интересно, есть ли у кого-нибудь опыт реализации следующего сценария.
Я использую WooCommerce, чтобы разместить мои продукты в списке и подготовить их к продаже. Некоторые продукты (около 20) имеют огромное количество вариаций, поэтому я решил разместить данные о продуктах в отдельных таблицах и через SKU (простой запрос для получения данных) загрузить их в woocommerce. Пока все работает отлично. Эти продукты работают нормально. Их варианты отображаются, и пользователь может выбрать их и добавить в корзину.

Дело в том, что я настроил эти 20 продуктов как отдельные продукты и добавил их цена 1 доллар, просто чтобы показать кнопку «Добавить в корзину» (.single_add_to_cart_button), но когда я выбираю свои варианты (из внешней таблицы/таблиц), продукт нормально добавляется в корзину, но это в этом случае для каждого продукта отображается цена в 1 доллар со всеми включенными настраиваемыми полями (что приятно). Насколько я знаю, эти настраиваемые поля взяты из сессий). Ниже приведен весь мой код, который я использую в моем файле function.php (не мой, найден в сети, исправлен для моего случая)

/ / Шаг 1. Добавьте данные в пользовательском сеансе, нажав кнопку «Добавить в корзину».

add_action('wp_ajax_wdm_add_user_custom_data_options', 'wdm_add_user_custom_data_options_callback');
add_action('wp_ajax_nopriv_wdm_add_user_custom_data_options', 'wdm_add_user_cus tom_data_options_callback ');

function wdm_add_user_custom_data_options_callback()
{

$product_id = $_POST['id'];
$product_category = $_POST[' Product_category'];

$custom_data_1 = $_POST['custom_data_1'];
$custom_data_2 = $_POST['custom_data_2'];
$custom_data_3 = $_POST['custom_data_3 '];
$custom_data_4 = $_POST['custom_data_4'];
$custom_data_5 = $_POST['custom_data_5'];
session_start();

$ _SESSION['custom_data_1'] = $custom_data_1;
$_SESSION['custom_data_2'] = $custom_data_2;
$_SESSION['custom_data_3'] = $custom_data_3;
$_SESSION['custom_data_4' ] = $custom_data_4;
$_SESSION['custom_data_5'] = $custom_data_5;

die();

// Шаг 2: Добавление пользовательских данных в сеанс WooCommerce

add_filter('woocommerce_add_cart_item_data','wdm_add_item_data',1,2);

if(!function_exists('wdm_add_item_data'))
{

function wdm_add_item_data($cart_item_data, $product_id)

{
global $woocommerce;
session_start();
$new_value = array();
if (isset($_SESSION['custom_data_1'])) {
$option1 = $_SESSION['custom_data_1'];
$new_value['custom_data_1'] = $option1;
if (isset($_SESSION['custom_data_2'])) {
$option2 = $_SESSION['custom_data_2'];
$new_value['custom_data_2 '] = $option2;
if (isset($_SESSION['custom_data_3'])) {
$option3 = $_SESSION['custom_data_3'];
$new_value ['custom_data_3'] = $option3;
if (isset($_SESSION['custom_data_4'])) {
$option4 = $_SESSION['custom_data_4'];
$new_value['custom_data_4'] = $option4;
if (isset($_SESSION['custom_data_5'])) {
$option5 = $_SESSION['custom_data_5'];
$new_value['custom_data_5'] = $option5;

if( пустой($option1) && пустой($option2) && пустой($option3) && пустой( $option4) && пустой($option5) )
return $cart_item_data;
else
{
if(empty($cart_item_data))
return $new_value;
else
return array_merge($cart_item_data,$new_value);

unset($_SESSION['custom_data_1']);
unset($_SESSION[ 'custom_data_2']);
не установлено($_SESSION['custom_data_3']);
не установлено($_SESSION['custom_data_4']);
не установлено($_SESSION['custom_data_5']) ;



// Шаг 3. Извлеките пользовательские данные из сеанса WooCommerce и вставьте их в объект «Корзина».

add_filter( 'woocommerce_get_cart_item_from_session', 'wdm_get_cart_items_from_session', 1, 3 );
if(!function_exists('wdm_get_cart_items_from_session'))
{
function wdm_get_cart_items_from_session($item,$values,$key)
{
if (array_key_exists( 'custom_data_1', $values ​​))
{
$item['custom_data_1'] = $values['custom_data_1'];
if (array_key_exists( 'custom_data_2', $values ​​) )
{
$item['custom_data_2'] = $values['custom_data_2'];
if (array_key_exists( 'custom_data_3', $values ​​) )
{
$item['custom_data_3'] = $values['custom_data_3'];
if (array_key_exists( ' custom_data_4', $values ​​) )
{
$item['custom_data_4'] = $values['custom_data_4'];
if (array_key_exists( 'custom_data_5', $ значения ) )
{
$item['custom_data_5'] = $values['custom_data_5'];

return $item;
}
>

// Шаг 4. Отображение пользовательских данных в корзине и на странице оформления заказа

add_filter('woocommerce_checkout_cart_item_quantity','wdm_add_user_custom_option_from_session_into_cart',1,3);
add_filter('woocommerce_cart_item_price','wdm_add_user_custom_option_from_session_into_cart',1,3);

if(!function_exists('wdm_add_user_custom_option_from_session_into_cart'))
{

function wdm_add_user_custom_option_from_session_into_cart($product_name, $values, $cart_item_key )
{

if(count($values['custom_data_1']) > 0)
{
$return_string = $product_name . "";
$return_string .="";
$return_string .= "SKU: " . $values['custom_data_1'] . "

"; //$return_string .= "Код: " . $values['custom_data_2'] . ""; $return_string .= "Ширина: " . $values['custom_data_3'] . " см"; $return_string .="Рост: " . $values['custom_data_4'] . " см"; $return_string .="Цена: € " . $values['custom_data_5'] . "";
$return_string .="";

return $return_string;
else
{
return $product_name;

}

// Шаг 5. Добавьте пользовательские данные в качестве метаданных к позициям заказа

add_action('woocommerce_add_order_item_meta','wdm_add_values_to_order_item_meta',1,2);
if(!function_exists('wdm_add_values_to_order_item_meta') )
{
function wdm_add_values_to_order_item_meta($item_id, $values)
{
global $woocommerce,$wpdb;
$user_custom_values ​​= $values['wdm_user_custom_data_value'];
if(!empty($user_custom_values))
{
wc_add_order_item_meta($item_id,'wdm_user_custom_data',$user_custom_values);

$custom_data_1 = $values['custom_data_1'];
if(!empty($custom_data_1))
{
wc_add_order_item_meta($item_id,'custom_data_1',$custom_data_1);
$custom_data_2 = $values['custom_data_2'];
if(!empty($custom_data_2))
{
wc_add_order_item_meta($item_id,'custom_data_2',$custom_data_2); $custom_data_3 = $values['custom_data_3'];
if(!empty($custom_data_3))
{
wc_add_order_item_meta($item_id,'custom_data_3', $custom_data_3);
$custom_data_4 = $values['custom_data_4'];
if(!empty($custom_data_4))
{
wc_add_order_item_meta($item_id ,'custom_data_4',$custom_data_4);
$custom_data_5 = $values['custom_data_5'];
if(!empty($custom_data_5))
{
wc_add_order_item_meta($item_id,'custom_data_5',$custom_data_5);

// Шаг 6. Удалите пользовательские данные, если продукт Удалено из корзины

add_action('woocommerce_before_cart_item_quantity_zero','wdm_remove_user_custom_data_options_from_cart',1,1);
if(!function_exists('wdm_remove_user_custom_data_options_from_cart'))
{
function wdm_remove_user_custom_data_options_from_cart($cart_item_key)
{
global $woocommerce;
// Получить корзину
$cart = $woocommerce->cart->get_cart();
// Для каждого товара в корзине, если товар является дополнительным по сравнению с удаленным товаром, удалите его
foreach( $cart as $key => $values)
{
if ( $values['wdm_user_custom_data_value'] == $cart_item_key )
unset( $woocommerce->cart->cart_contents[ $key ] );
}


Я пытался включить следующий код

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

функция add_custom_price($cart_object) {
$custom_price = 999; // Это пользовательская цена
foreach ( $cart_object->cart_contents as $key => $value ) {
$value['data']->price = $custom_price;
}
}


он ​​меняет цену на 999, поскольку она фиксированная, но в моем случае я не могу включить это значение


$custom_data_5 = $_POST['custom_data_5']; // это моя цена за единицу, которая должна заменить стоимость в 1 доллар простой стоимости продукта из продукта


любая помощь будет оценена с моей стороны, так как У меня сейчас заканчиваются варианты, и это решение, кажется, поможет мне.

Ян

Подробнее здесь: https://stackoverflow.com/questions/443 ... d-checkout
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»