Ответы пользователя по тегу WooСommerce
  • Какая самая легкая, минимальная тема для ИМ на WooCommerce?

    @easycode
    не боюсь задавать глупые вопросы ))
    Ну кто же его знает какая из тысяч тем самая легкая и минимальная - это же надо собрать все темы и протестировать хорошенько. Кто же таким непосильным и ненужным трудом будет заниматься?

    Найдите любую простую minimal, clean тему с поддержкой woocommerce в каталоге https://wordpress.org/themes/search/woocommerce/ и попробуйте...

    p.s.: попробуйте оригинальную тему https://wordpress.org/themes/storefront/ от разработчиков WooCommerce - возможно она более менее легкая
    Ответ написан
    1 комментарий
  • Как передать имя в заголовок письма woocommerce?

    @easycode
    не боюсь задавать глупые вопросы ))
    В админке идем в: WooCommerce > Настройки, выбираем вкладку: E-mail'ы, находим там: Заказ на удержании и нажимаем справа от него кнопку Управление:
    61ea69290feaa034711970.png
    Ответ написан
  • Как сделать опрос/квиз с подбором товаров после?

    @easycode
    не боюсь задавать глупые вопросы ))
    а такой плагин https://woocommerce.com/products/product-recommend... не подойдет?
    а бесплатная версия: https://wordpress.org/plugins/product-recommendati... ?
    Ответ написан
  • Как сделать зарытую категорию товаров woocommerce?

    @easycode
    не боюсь задавать глупые вопросы ))
    может тут https://wpnull.org/?s=WooCommerce+Members+Only&lang=ru- что-нибудь за 300 руб. найдете )
    Ответ написан
    Комментировать
  • Как добавить большое количество изображений товаров в WooCommerce?

    @easycode
    не боюсь задавать глупые вопросы ))
    1) я бы написал свой функционал импорта (+ чтобы можно было контролировать расходование памяти - загрузка небольшими частями)
    2) если возможно ситуация что у разных товаров могут быть одинаковые изображения - то хорошо бы организовать перед загрузкой что-то типа:
    public function get_attachment_by_hash($hash_file)
    {
    	if ( !$hash_file ) return 0;
    	$attachments = get_posts(array(
    		'numberposts' => 1,
    	    'post_type'   => 'attachment',
    	    'post_status' => 'inherit',
    	    'meta_query'  => array(
    	        array(
    	            'key'     => 'hash_file',
    	            'value'   => $hash_file
    	        )
    	    )
    	));
    	if (!is_array($attachments) or !count($attachments)) return 0;
    	if ($attachments[0]->ID)  
    		return $attachments[0]->ID;
    	else 
    		return 0;
    	//update_post_meta( $attachment_id, 'photo_title', $metadata['image_meta']['title'] );
    }
    
    
    $tmp_file = download_url( $_first_pic, 600 );
    
    if ( is_wp_error( $tmp_file ) ) {
    	$this->error($tmp_file->get_error_messages());
    	return '';
    } else {
    	$hash_file = hash_file('md5', $tmp_file);
    	$this->log("md5 hash file: $hash_file");			
    	$this->log("download image: $_first_pic");
    }
    
    $att_id = $this->get_attachment_by_hash($hash_file);
    
    if ($att_id) {
      //find attachment duplicate ID: $att_id
    } else {
      $att_id = media_handle_sideload( array(
        'name' => preg_replace('/\?.*/', '', basename($_first_pic)),
        'tmp_name' => $tmp_file,
      ), $this->product_id, $title);
    
      if ( is_wp_error( $att_id ) ) {
        $this->error($att_id->get_error_messages());
      } else {
        update_post_meta($att_id, 'hash_file', $hash_file);	
        set_post_thumbnail($this->product_id, $att_id);
      }
    }


    в целом я как-то запихивал в БД WooCommerc'а из CSV около 20 тыс. товаров - никаких подвисаний и проблем не было в общем-то )
    Ответ написан
    Комментировать
  • Как сделать товары без изображений в конец списка?

    @easycode
    не боюсь задавать глупые вопросы ))
    В get_posts юзать fields => ids, чтобы на выходе был не огромный массив объектов (постов), а простой массив id-шников - всё равно кроме id больше ничего не нужно будет в цикле - экономия памяти!
    заюзать WP-CLI для того чтобы всю эту обработку реордеинга запустить первый раз

    ну и далее можно навесить hook например на save_post, который будет проверять загружен ли thumbnail для товара и если да - то реордерить позицию товара

    можно еще разобраться в том где и как в таблицах WordPress'а хранится связка между постом (товаром) и главным его изображением (thumbnail) и соотв. через хук для фронт-части сайта изменить главный query-запрос с учетом этой сортировки

    я вот менял сортировку кастомной таксономии в админке - по похожему принципу:

    add_filter( 'terms_clauses', function ( $pieces, $taxonomies, $args ) {
        global $pagenow, $wpdb;
        if ( is_admin() && $pagenow == 'edit-tags.php' && $taxonomies[0] == 'program_session' ) {
            $pieces['join']  .= ' INNER JOIN ' . $wpdb->termmeta . ' AS tm ON t.term_id = tm.term_id ';
            $pieces['where'] .= ' AND tm.meta_key = "program_session_start"';
            $pieces['orderby']  = ' ORDER BY tm.meta_value ';
        }
        return $pieces;
    }, 10, 3 );


    у вас другой случай - но подход возможно похожий https://wp-kama.ru/hook/posts_clauses

    UPD: по-моему вот ответ на ваш вопрос: https://stackoverflow.com/questions/15956135/how-c...
    Ответ написан
    Комментировать
  • Не отображается значок нового заказа в Woocommerce?

    @easycode
    не боюсь задавать глупые вопросы ))
    А javascript-ошибок в панели администрирования случаем нет? Посмотрите в браузере - также откройте в инспекторе панельку где запросы - увидите как там Ajax-запросы срабатывают...
    Ответ написан
    Комментировать
  • Как добавить в корзину Woocommerce товар через API?

    @easycode
    не боюсь задавать глупые вопросы ))
    Самым правильным наверное будет использовать REST API - посмотрите здесь: https://newbedev.com/how-to-insert-product-in-cart...
    Ответ написан
    Комментировать
  • Долго подгружается страница создания/редактирования товара WooCommerce?

    @easycode Автор вопроса
    не боюсь задавать глупые вопросы ))
    И надо же отключил Yoast SEO - эффект зависания пропал - корень зла Yoast выходит!
    Ответ написан
  • Первый товар из категории WooCommerce?

    @easycode Автор вопроса
    не боюсь задавать глупые вопросы ))
    $_first_product = get_posts( array(
        'numberposts' => 1,
        'post_type'   => 'product',
        'category' => $_categories,
        'post_status' => 'publish',
        //'orderby'=>'menu_order',
        'order'=>'ASC',
    ) );
    
    if ( is_array($_first_product) and count($_first_product) and $_first_product[0]->ID == $_product_id ) 
        $_is_first_product = true;


    если $_is_first_product = true значит это первый по порядку товар в категории
    в $_categories - ID-шник категории текущего товара
    Ответ написан
    Комментировать
  • Использовать WooCommerce для оплаты в своём плагине?

    @easycode Автор вопроса
    не боюсь задавать глупые вопросы ))
    Кажется я уже нашёл вариант, осталось только применить и затестить:

    if (isset($_POST['isOrder']) && $_POST['isOrder'] == 1) {
        $address = array(
            'first_name' => $_POST['notes']['domain'],
            'last_name'  => '',
            'company'    => $_POST['customer']['company'],
            'email'      => $_POST['customer']['email'],
            'phone'      => $_POST['customer']['phone'],
            'address_1'  => $_POST['customer']['address'],
            'address_2'  => '', 
            'city'       => $_POST['customer']['city'],
            'state'      => '',
            'postcode'   => $_POST['customer']['postalcode'],
            'country'    => 'NL'
        );
     
        $order = wc_create_order();
        foreach ($_POST['product_order'] as $productId => $productOrdered) :
            $order->add_product( get_product( $productId ), 1 );
        endforeach;
     
        $order->set_address( $address, 'billing' );
        $order->set_address( $address, 'shipping' );
     
        $order->calculate_totals();
     
        update_post_meta( $order->id, '_payment_method', 'ideal' );
        update_post_meta( $order->id, '_payment_method_title', 'iDeal' );
     
        // Store Order ID in session so it can be re-used after payment failure
        WC()->session->order_awaiting_payment = $order->id;
     
        // Process Payment
        $available_gateways = WC()->payment_gateways->get_available_payment_gateways();
        $result = $available_gateways[ 'ideal' ]->process_payment( $order->id );
     
        // Redirect to success/confirmation/payment page
        if ( $result['result'] == 'success' ) {
     
            $result = apply_filters( 'woocommerce_payment_successful_result', $result, $order->id );
     
            wp_redirect( $result['redirect'] );
            exit;
        }
    }
    Ответ написан
    Комментировать
  • Нужно организовать оплату в Интернет-магазине на WooCommece через Uniteller - есть идеи?

    @easycode Автор вопроса
    не боюсь задавать глупые вопросы ))
    Написал еще тогда быстрое решение: https://github.com/enshtein/wc-uniteller
    Настроек не много, там что-то с типом налогооблажения в коде осталось.
    Появится время запилю плагин и выложу в каталог WordPress.
    Ответ написан
    Комментировать
  • Большой многоязычный магазин на WooCommerce в сети WordPress Multisite с синхронизацией 1С - как организовать всё?

    @easycode Автор вопроса
    не боюсь задавать глупые вопросы ))
    Пока что остановились на конфигурации WordPress + WooCommerce + Polylang Pro + Polylang for WooCommerce
    Размножили 7 тыс. товаров по еще 2 языкам, итого: 21 тыс. товаров в базе, у каждого товара атрибуты в мета-полях.

    На мощном серваке страницы генерируются за 0,2-0,5 секунд - для нас более чем прекрасные результаты!
    Ответ написан
    Комментировать
  • Online-оплата заказа в WooCommerce после модерации - готовые решения (плагины)?

    @easycode Автор вопроса
    не боюсь задавать глупые вопросы ))
    Всё оказалось довольно просто:

    К примеру можно сделать так:

    function receipt_page($order_id) {
    
    	    	global $woocommerce;
    	    	$this->order = new WC_Order($order_id);
    
    			// если заказ не помечен как готовый к оплате, то меняем статус на "Обработка" и перекидываем на страницу с уведомлением! 
    			if (get_post_meta( $this->order->id, 'ready_to_pay', true) != 1) {
    	    		$woocommerce->cart->empty_cart();
    	    		$this->order->update_status('processing');
    	    		wp_redirect( home_url( '/' ) ); // заменить на URL-адрес страницы с текстом: "Ваш заказ поступил в обработку..."
    				return false;
    	    	}

    и далее если статус заказа меняется на "Ожидает оплаты", то:
    add_action( 'woocommerce_order_status_pending', function ($order_id) {
    	update_post_meta( $order_id, 'ready_to_pay', 1);
    });
    Ответ написан
    2 комментария
  • Как массово умножить все цены на сайте Woocommerce?

    @easycode
    не боюсь задавать глупые вопросы ))
    function return_custom_price($price, $product) {
        $price = $price * 70; // где 70 - ваш курс
        return $price;
    }
    add_filter('woocommerce_get_price', 'return_custom_price', 10, 2);
    Ответ написан
  • Как в WooCommerce сделать скидку при покупке (заказе) через сайт?

    @easycode Автор вопроса
    не боюсь задавать глупые вопросы ))
    решил проблему с помощью плагина: WooCommerce All Discounts Lite, создал там скидку общую для всех товаров, а чтобы эта скидка отображалась на странице товара добавил в папку темы файл: woocommerce/single-product/price.php следующего содержания:
    if ( ! defined( 'ABSPATH' ) ) {
    	exit; // Exit if accessed directly
    }
    
    global $product;
    
    ?>
    <p class="price"><?php echo $product->get_price_html(); ?></p>
    <?php
    
    $_discounts = get_posts(array('post_type'=>'o-discount'));
    if (is_array($_discounts) and is_object($_discounts[0])) {
    	//print_r(get_post_custom($_discounts[0]->ID));
    	$_meta = get_post_meta($_discounts[0]->ID, 'o-discount', true);
    	if ($_meta['percentage-or-fixed-amount'] > 0) {
    		$_percentage = 100 - $_meta['percentage-or-fixed-amount'];
    		$_discount_price = $product->price * ($_percentage / 100);
    		echo '<p class="price woo-discount"><label>Цена при покупке через сайт:</label>' . number_format($_discount_price, 0, '.', '&nbsp;') . '&nbsp;<span class="woocommerce-Price-currencySymbol">&#8381;</span></p>';
    	}
    }
    Ответ написан
    Комментировать
  • Не работает предзаказ в WooCommerce - где смотреть и что подкрутить?

    @easycode Автор вопроса
    не боюсь задавать глупые вопросы ))
    Оказалось всё просто - функция предзаказа включается когда товар в Наличии, но остаток у него 0.
    Ответ написан
    Комментировать
  • Как записать несколько значений для одного атрибута товара в WooCoommerce?

    @easycode Автор вопроса
    не боюсь задавать глупые вопросы ))
    Разобрался сам, вот код:

    function save_wc_custom_attributes($post_id, $custom_attributes) {
        foreach ($custom_attributes as $name => $value) {
            $product_attributes[] = array(
                'name' => htmlspecialchars( stripslashes( $name ) ), // set attribute name
                'value' => $value, // set attribute value
                'position' => 1,
                'is_visible' => 1,
                'is_variation' => 0,
                'is_taxonomy' => is_array($value) ? 1 : 0,
            );
        }
        update_post_meta($post_id, '_product_attributes', $product_attributes);
    }
    
    // пример записи значений типа текст, для товара с ID = $id
    $_product_attributes = array();
    $_product_attributes['pa_weight'] = '140';        
    
    // $_product_attributes['pa_color'] = 'red'; 
    
    // допустим, нам нужно записать значения разных цветов:
    $colors = array('red', 'green', 'yellow');
    
    // записываем:
    wp_set_object_terms($id, $colors, 'pa_color', false);
    // обновляем такие свойства атрибута как: position, is_visible, is_taxonomy
    $_product_attributes['pa_color'] = $colors;
    
    
    save_wc_custom_attributes($id, $_product_attributes);
    Ответ написан
    Комментировать