Intereting Posts
Кэширование PHP – быстрее ли сохранять в базе данных или создавать файл? Результаты умножения функции в PHP Как написать функцию wordpress «is_front_page ()» в ветке кода дерева? Какие системные файлы должны находиться в закрытой среде для правильной работы php-fpm на ubuntu? Какова наилучшая практика для ограничения определенных страниц для входа в систему только в Codeigniter? Разница между возвращаемым значением выражения PHP и переменной Как эффективно заменить (mysql_result (mysql_query ()) в PDO? HTML-форма PHP post для самостоятельной проверки или отправки на новую страницу как передать значение id в списке выбора в форме, используя сообщение или получить? Статические классы в PHP через абстрактное ключевое слово? Максимальная длина строки в почте Как я могу получить имя класса из статического вызова в расширенном классе PHP? Как вывести MD5 хешированный пароль в виде обычного текста? Самый эффективный подход для многоязычного веб-сайта PHP Соединение PDO: декларация UTF-8 с SET NAMES / CHARACTER SET?

Добавление продукта в корзину с пользовательской информацией и ценой

Я установил woocommerce для обработки и ввода продукта в магазине WordPress.

Страница магазина настраивается на заказ, что позволяет пользователю выбирать продукт из списка и настраивать его, что выводит цену в javascript на основе информации, хранящейся в базе данных.

Продукты, хранящиеся в db, оцениваются в 0,00, потому что разные цены зависят от выбранных переменных.

Выходные данные, которые я готов передать в woocommerce, следующие:

  • Идентификатор продукта WC (соответствует продукту в db)
  • Пользовательская цена
  • Пользовательское изображение
  • Пользовательское описание (например, 100 мм x 100 мм)
  • Данные по сборке (для хранения по отношению к элементу, но не отображаемого в кассе)

Я пытаюсь найти способ добавить товар в корзину, используя идентификатор продукта (чтобы сделать его действительным), а затем переопределить цену с пользовательской ценой и добавить метаданные, которые больше всего будут видны при оформлении заказа, и один будет скрыт пока не увидите в wordpress admin.

Добавление продукта в корзину достигается за счет использования:

$woocommerce->cart->add_to_cart($_POST['custom_product_id']); 

После чего я нахожу невозможным переопределить цену и добавить дополнительную информацию.

Solutions Collecting From Web of "Добавление продукта в корзину с пользовательской информацией и ценой"

Весь этот код переходит в функции functions.php

  1. Это фиксирует дополнительную размещенную информацию (все отправленные в одном массиве)

     add_filter('woocommerce_add_cart_item_data','wdm_add_item_data',1,10); function wdm_add_item_data($cart_item_data, $product_id) { global $woocommerce; $new_value = array(); $new_value['_custom_options'] = $_POST['custom_options']; if(empty($cart_item_data)) { return $new_value; } else { return array_merge($cart_item_data, $new_value); } } 
  2. Это фиксирует информацию из предыдущей функции и прикрепляет ее к элементу.

     add_filter('woocommerce_get_cart_item_from_session', 'wdm_get_cart_items_from_session', 1, 3 ); function wdm_get_cart_items_from_session($item,$values,$key) { if (array_key_exists( '_custom_options', $values ) ) { $item['_custom_options'] = $values['_custom_options']; } return $item; } 
  3. Это отображает дополнительную информацию о корзине и выписке из добавленной информации, которая была прикреплена к элементу.

     add_filter('woocommerce_cart_item_name','add_usr_custom_session',1,3); function add_usr_custom_session($product_name, $values, $cart_item_key ) { $return_string = $product_name . "<br />" . $values['_custom_options']['description'];// . "<br />" . print_r($values['_custom_options']); return $return_string; } 
  4. Это добавляет информацию в виде метаданных, чтобы ее можно было рассматривать как часть заказа (чтобы скрыть любые метаданные от клиента, просто запустите его с подчеркиванием)

     add_action('woocommerce_add_order_item_meta','wdm_add_values_to_order_item_meta',1,2); function wdm_add_values_to_order_item_meta($item_id, $values) { global $woocommerce,$wpdb; wc_add_order_item_meta($item_id,'item_details',$values['_custom_options']['description']); wc_add_order_item_meta($item_id,'customer_image',$values['_custom_options']['another_example_field']); wc_add_order_item_meta($item_id,'_hidden_field',$values['_custom_options']['hidden_info']); } 
  5. Если вы хотите переопределить цену, вы можете использовать информацию, сохраненную против продукта, для этого

     add_action( 'woocommerce_before_calculate_totals', 'update_custom_price', 1, 1 ); function update_custom_price( $cart_object ) { foreach ( $cart_object->cart_contents as $cart_item_key => $value ) { // Version 2.x //$value['data']->price = $value['_custom_options']['custom_price']; // Version 3.x / 4.x $value['data']->set_price($value['_custom_options']['custom_price']); } } 

Вся ваша пользовательская информация появится в электронной почте и заказе клиента из WordPress, если вы добавите ее в качестве метаданных (4.)

Шаг 1: вам нужно создать некоторые настраиваемые скрытые поля для отправки пользовательских данных, которые будут отображаться на отдельной странице продукта. например :-

 add_action('woocommerce_before_add_to_cart_button', 'custom_data_hidden_fields'); function custom_data_hidden_fields() { echo '<div class="imput_fields custom-imput-fields"> <label class="price_prod">price: <br><input type="text" id="price_prod" name="price_prod" value="" /></label> <label class="quantity_prod">quantity: <br> <select name="quantity_prod" id="quantity_prod"> <option value="1" selected="selected">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> </select> </label> </div><br>'; } 

Шаг 2: – Теперь после этого вам нужно написать основную логику для сохранения пользовательских полей «Сохранить все товары» в данные корзины товаров, следуя приведенным ниже кодам.

 // Logic to Save products custom fields values into the cart item data add_action( 'woocommerce_add_cart_item_data', 'save_custom_data_hidden_fields', 10, 2 ); function save_custom_data_hidden_fields( $cart_item_data, $product_id ) { $data = array(); if( isset( $_REQUEST['price_prod'] ) ) { $cart_item_data['custom_data']['price_pro'] = $_REQUEST['price_prod']; $data['price_pro'] = $_REQUEST['price_prod']; } if( isset( $_REQUEST['quantity_prod'] ) ) { $cart_item_data['custom_data']['quantity'] = $_REQUEST['quantity_prod']; $data['quantity'] = $_REQUEST['quantity_prod']; } // below statement make sure every add to cart action as unique line item $cart_item_data['custom_data']['unique_key'] = md5( microtime().rand() ); WC()->session->set( 'price_calculation', $data ); return $cart_item_data; } 

Шаг 3: вам нужно переопределить цену товара с помощью пользовательских вычислений. Он будет работать со всеми вашими сценариями ваших сеансов одного продукта.

 add_action( 'woocommerce_before_calculate_totals', 'add_custom_item_price', 10 ); function add_custom_item_price( $cart_object ) { foreach ( $cart_object->get_cart() as $item_values ) { ## Get cart item data $item_id = $item_values['data']->id; // Product ID $original_price = $item_values['data']->price; // Product original price ## Get your custom fields values $price1 = $item_values['custom_data']['price1']; $quantity = $item_values['custom_data']['quantity']; // CALCULATION FOR EACH ITEM: ## Make HERE your own calculation $new_price = $price1 ; ## Set the new item price in cart $item_values['data']->set_price($new_price); } } 

Все будет сделано внутри функции functions.php

Справочный сайт