Ответы пользователя по тегу WordPress
  • Как все товары сделать вариацией одного?

    Как вариант:
    - Сделайте копию БД
    - Создайте новый товар, к которому Вы будете прикреплять вариации. Добавьте соотв. атрибут и создайте одну вариацию.
    - Сделайте выгрузку всей котегории стандартным эскпортом woo.
    - откройте Ваш csv и скорректируйте поля для товаров которые Вы хотите сделать вариациями по примеру новой вариации.
    - Загрузите обратно используя стандартный импорт Woo. Если не выйдет, то попробуйте перед импортом удалить товары, которые хотите сделать вариациями.
    Ответ написан
    Комментировать
  • Как сделать вывод вариаций товара на странице листинга?

    Может тогда отказаться от вариативных товаров и не пытаться сломать систему.

    Но если очень хочется то есть соотв плагины поиск

    Или вывести карточки самостоятельно и наполнить ссылку соост. аргументами. как пример
    Ответ написан
    Комментировать
  • Почему не работает код вывода html в карточку товара woocommerce?

    Уберите знак амперсанда перед this array( &$this, 'add_custom_html' )
    Проверьте подключен ли Ваш класс и вызывается ли конструктор
    Добавьте область видимости public к Вашей функции обработчику хука.
    Ответ написан
    Комментировать
  • Есть ли плагины фильтра товаров как на Wildberries?

    Вы смешали 2 инструмента. Вывод категорий и фильтр
    Вывод категорий в нужном Вам формате выдает стандартный виджет категорий woo
    Ну а вильтр тет независимый инструмент.
    Ответ написан
    Комментировать
  • Как на странице заказа WooCommerce применить скидку к определённым категориям товаров в зависимости от формата доставки?

    в цикле который применяет скидку сделайте проверку на принадлежность категории через has_term и исключите этот товар из применения скидки.
    Ответ написан
    2 комментария
  • Как вывести сумму стоимости всех товаров?

    Пробежаться по всем товарам и посчитать.
    Только процедура эта тяжелая и желательно результат кидать в транисиенты.
    править по факту изменения, удаления товара
    Ответ написан
    6 комментариев
  • Woocommerce одна функция вместо несколько?

    Все достаточно просто.
    Вам надо изменить данные которые отправляете и отправлять все выбранные пользователем позиции и их количество. А на сервере обработать входящие данные и добавить все в корзину.

    Пример обработки запроса на множественное добавление в корзину
    /**
    	 * Множественное добавление в корзину
    	 * Вызывается по Ajax
    	 *
    	 * @hook-handle qop_add_to_cart
    	 */
    	public function ajax_add_to_cart() {
    
    		$product_items = isset( $_POST['products'] ) && is_array( $_POST['products'] ) ? $_POST['products'] : false;
    
    		$errors               = array();
    		$added_products_count = 0;
    
    		foreach ( $product_items as $item ) {
    			$product_id   = $item['product_id'];
    			$quantity     = $item['quantity'];
    			$variation_id = $item['variation_id'];
    			$title        = $item['product_title'];
    			$sku          = $item['sku']; // для простого товара здесь тоже его sku
    
    
    			$passed_validation = apply_filters( 'woocommerce_add_to_cart_validation', true, $product_id, $quantity );
    			$product_status    = get_post_status( $product_id );
    
    			if ( $passed_validation && WC()->cart->add_to_cart( $product_id, $quantity, $variation_id ) && 'publish' === $product_status ) {
    
    				do_action( 'woocommerce_ajax_added_to_cart', $product_id );
    				$added_products_count ++;
    
    			} else {
    				$notices = WC()->session->get( 'wc_notices', array() );
    				if ( isset( $notices['error'] ) ) {
    					$error   = array_pop( $notices['error'] );
    					$err_msg = preg_replace( '/<a.*?href.*?=(.*)>(.*?)<\/a>/', '', $error );
    
    					$errors[] = array(
    						'variationId' => $variation_id,
    						'title'       => $title,
    						'sku'         => $sku,
    						'msg'         => $err_msg,
    					);
    				}
    				wc_clear_notices();
    			}
    		}
    
    		$response = array(
    			'added'  => $added_products_count,
    			'errors' => $errors,
    			'popup'  => $this->template_errors_formating( $errors ),  // Формирование собственного popup-a для пользователя
    			'cart'   => $this->get_refreshed_fragments(),  // необходимо для обновления миникорзины в шапке.
    		);
    
    		wp_send_json( $response );
    	}
    Ответ написан
    1 комментарий
  • Магазин на WordPress + woocommerce, при попытке загрузки товаров CSV нет картинки товара, в чем может быть проблема?

    Проверьте csv. Формат информации о картинке должен представлять собой url ссылку на картинку. т.е. Вы должны иметь возможность свободно ее скачать.
    Ответ написан
    1 комментарий
  • Как поменять порядок вывода товаров по умолчанию?

    В интернете нашел такой кусочек кода, но как его нужно обернуть чтобы он менял порядок моих товаров?
    Ответ НИКАК. Потому, что это модуль управления сортировкой по метаполям, у а Вас требуется по значению атрибута.

    Как вариант, Вам нужно написать блок кода который будет транслировать Ваши атрибуты в метаполя и уже после делать сортировку используя Ваш кусочек кода. Задача не тривиальная, но решаемая.
    Вот примерный алгоритм
    • Для каждого значения атрибута(термина в таблице wp_terms) добавить метаполе (в таблицу метаполей терминов) со значением порядка сортировки (0,1,2,3,...)
    • Подключится к хуку сохранения товара и считать значение метаполя атрибута для сохраняемого товара
    • Сохраниить это значение в метаполе товара
    • Сделать сортировку по метаполю


    Ну как то так.
    Ответ написан
    7 комментариев
  • Woocommerce потерял связь между атрибутами в вариациях?

    Просто так ничего не происодит.
    Вы что то сделали и это результат вмешательства.

    Что делать
    - Перезалить
    - Или откатиться на бэкап.
    - Или вручную править
    Ответ написан
  • Как добавить подарок в корзину и заказ?

    Так в одной функции этого не сделаешь
    - В момент добавления товара Вам нужно добавить еще один товар.
    - Для учета стоимости подарка можно добавить скидку к заказу.
    - Продумать вариант удаления подарка, если пользователь удалит основной товар.

    Как пример ниже. Взято с реального проекта. Т.к. акция была разовая, я не заморачивался с настройками и зашил идентификаторы жестко в коде.

    Добавляется подарочный товар "Мяч" если пользователь кладет в корзину любой товар из таксономии "promotion" с id=1280
    /**
     * Add product id=42444 "ball STORM PRO HB" to cart if added any product from
     * promotion 1280
     *
     * @param $cart_item_key Current cart item key.
     * @param $product_id    Current product id (parent id for variations).
     *
     * @throws Exception
     */
    function hml_woocommerce_add_to_cart( $cart_item_key, $product_id ) {
    	$tax     = 'promotion';
    	$term_id = 1280;
    	if ( ! has_term( $term_id, $tax, $product_id ) ) {
    		return;
    	}
    
    	foreach ( WC()->cart->get_cart() as $cart_item ) {
    		$product_in_cart = $cart_item['product_id'];
    		if ( $product_in_cart === 42444 ) {
    			return;
    		}
    	}
    
    	WC()->cart->add_to_cart( 42444, 1, 42450 ); // аргументы: id-товара, кол-во, id-разновидности(вариации)
    }
    
    add_action( 'woocommerce_add_to_cart', 'hml_woocommerce_add_to_cart', 10, 2 );


    Код ниже заменяет поле выбора количества для подарочного товара, но для того что бы woo мог его обрабатывать делает input скрытым.
    /**
     * Filter quantity input tag for cart item.
     * Actualy replace input tag with const "1" for certain products
     *
     * @param $product_quantity Default output.
     * @param $cart_item_key    Current cart item key.
     * @param $cart_item        Current cart item.
     *
     * @return string
     */
    function hml_woo_cart_item_quantity( $product_quantity, $cart_item_key, $cart_item ) {
    	$product_in_cart = $cart_item['product_id'];
    	if ( $product_in_cart === 42444 ) {
    		$product_quantity = sprintf( '1 <input type="hidden" name="cart[%s][qty]" value="1" />', $cart_item_key );
    	}
    	return $product_quantity;
    }
    
    add_filter( 'woocommerce_cart_item_quantity', 'hml_woo_cart_item_quantity', 10, 3 );


    для добавления скидки (компенсации цены подарочного товара) к заказу можете использовать хук 'woocommerce_cart_calculate_fees'

    С Удалением я не заморачивался, поэтому подсказать хук не смогу. надо гуглить.
    Ответ написан
    Комментировать
  • Почему не работает выборка в форму wordpress?

    Вообще классная штука отладчик. Очень рекомендую пользоваться.

    Беглый взгляд показывает, что Вы сохраняете данные в метаполе с именем _gift_product_id а читаете из _gift_product_ids обратите внимание на последнюю букву в назывании.

    Отладчик бы вам это показал.
    Ответ написан
    Комментировать
  • Как добавить виджет как на скрине?

    Собственно ничего сложного.
    Добавьте новый текстовый виджет (или html). Вместо чисел пропишите вызов своих шорткодов.
    Создайте свои шорткоды, это очено просто, и выводите нужную информацию.
    У Вас могут быть отключена поддержка шорткодов, как включить есть здесь
    Три последние числа можно взять с wp, а вот просмотры и посетители,скорее всего удобнее будет подключить какой то ресурс и считывать с него. Обязательно все внешние запросы кэшируйте у себя в трансиентах.
    Ответ написан
    Комментировать
  • Возможна автоматическая смены цен в Woocommerc?

    Возможно, но нужно прописать ручками.

    Как вариант.
    - Делаете запрос, получаете данные. Сохраняете их в файле
    - Запускаете фоновую обработку и указывайте процедуру обработки.

    Для фоновых процессов загляните сюда WP Background Processing. Woo под капотом тоже его использует, так что можно даже не грузить.
    Ответ написан
    Комментировать
  • Почему не срабатывает jQuery в мини-корзине Woocommerce?

    Странно. Какой ответ Вы хотите получить?
    Из Вашего описания не понятно как Вы их добавили, самостоятельно (через хуки) или с помощью плагина.
    Если самостоятельно, то код обработки нажатий должны были писать Вы. Тогда неплохо бы его показать тут.
    Если плагином, то надо смотреть плагин.

    Почему решили что виноват jQuery?
    Ответ написан
  • Почему не показывает фильтрацию по атрибутам плагин Premmerce Product Filter for WooCommerce?

    Так же в настройках товаров пропали все настроенные ранее атрибуты
    Этим Вы отвечаете на свой главный вопрос. Поэтому фильтр и не показывает.

    А вот почему такое произошло, это уже надо смотреть.
    Ответ написан
    Комментировать
  • Как правильно записать данный код в functions.php?

    Бегите от этого кода, т.к. он бессмысленен и избыточен.
    1 - из базы выгружаются все записи товаров. А если их несколько десятков тысяч, тогда Ваш сервер поднапряжется.
    2 - Далее для получения id товара загружается вся мощь $query->the_post();. Можно было просто сделать запрос на получение только списка id.
    3 - Далее вообще пустая работа. Сначала получаем артикул, потом проверяем существует ли он и его же присваиваем обратно.

    Сформулируйте Ваше затруднение(проблему) более точно. Возможно, что решение рядом.
    Ответ написан
    3 комментария
  • Изменение цены товара при добавлении в корзину?

    Все верно.
    Woo в момент добавления товара не знает о его новой цене. Вот и отображает старую цену.
    В корзине Вы это видите потому, что для отображения страницы корзины уже работает следующий запрос и Ваша кука уже определена.
    А виджет не отображает изменения пока не изменится содержимое Вашей корзины. Это сделано для уменьшения количества ajax запросов и синхронизации виджета на всех открытых страницах Вашего сайта.

    Вообще Вы бы могли подменять цену в момент добавления товара в корзину, тогда не пришлось бы возится с куками и делать дополнительные ajax запросы.

    Или Вы можете просто добавить в форму add_to_cart скрытое поле и заполнять его новой ценой перед отправкой. И далее в Вашем методе проверять данные этого скрытого поля, если есть устанавливать цену.
    Ответ написан
    5 комментариев
  • Как восстановить окошко с выбором типа товара WP WOOCOMMERCE?

    По умолчанию из коробки это не должно быть скрыто.

    Посмотрите в инспекторе есть ли этот select в html. Посмотрите каким образом он скрыт. Поищите по коду сайта скрипт который его скрывает. Если это плагин попробуйте отключить его. Если это в теме проверьте комментарии которые оставил прошлый программист и попробуйте отобразить.
    Ответ написан