Ответы пользователя по тегу WooСommerce
  • Как сделать, отображение цены в зависимости от количества товара прямо в карточке товара?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    6e41f69aee52432fb5aa4bfcee10bb4c.png

    Такой вариант вам подойдет? могу скинуть готовый код.

    UPD. Вам нужно переопределить шаблон quantity-input.php (скопируйте себе в тему)... и вот такой код в него вставить
    <?php
    if ( ! defined( 'ABSPATH' ) ) {
        exit; // Exit if accessed directly
    }
    $post_type = get_post_type( $post_id );
    if ($post_type=='product') {
    global $product;
    ?>
    <div class="quantity">
        Количество: <button type="button" id="remove_one">-</button><input type="text" name="<?php echo esc_attr( $input_name ); ?>" value="<?php echo esc_attr( $input_value ); ?>" title="<?php echo esc_attr_x( 'Qty', 'Product quantity input tooltip', 'woocommerce' ) ?>" class="input-text qty text" size="4" pattern="<?php echo esc_attr( $pattern ); ?>" inputmode="<?php echo esc_attr( $inputmode ); ?>" /><button type="button" id="add_one">+</button>
        <div class="order-summ">Сумма: <span id="orderSumm"><?php echo $product->get_price();?></span> грн.</div>
    </div>
    <script>
        var price = jQuery('#orderSumm').html();
        var quantity;
        var summ;
        jQuery('#remove_one').on('click',function(){
            quantity = jQuery('input.qty').val();
            if (quantity <= 1) {
                summ = price*quantity;
                jQuery('input.qty').val(quantity);
                jQuery('#orderSumm').html(summ);
            } else {
                quantity--;
                summ = price*quantity;
                jQuery('input.qty').val(quantity);
                jQuery('#orderSumm').html(summ);
            }
        });
        jQuery('#add_one').on('click',function(){
            quantity = jQuery('input.qty').val();
            quantity++;
            summ = price*quantity;
            jQuery('input.qty').val(quantity);
            jQuery('#orderSumm').html(summ);
        });
        jQuery('input.qty').keyup(function(){
            var removedText = $(this).val().replace(/\D/, '');
            jQuery(this).val(removedText);
            quantity = jQuery(this).val();
            summ = price*quantity;
            jQuery('input.qty').val(quantity);
            jQuery('#orderSumm').html(summ);
        });
    
    </script>
    <?php } else {?>
        <div class="quantity">
            <input type="number" step="<?php echo esc_attr( $step ); ?>" min="<?php echo esc_attr( $min_value ); ?>" max="<?php echo esc_attr( $max_value ); ?>" name="<?php echo esc_attr( $input_name ); ?>" value="<?php echo esc_attr( $input_value ); ?>" title="<?php echo esc_attr_x( 'Qty', 'Product quantity input tooltip', 'woocommerce' ) ?>" class="input-text qty text" size="4" pattern="<?php echo esc_attr( $pattern ); ?>" inputmode="<?php echo esc_attr( $inputmode ); ?>" />
        </div>
    <?php }?>
    Ответ написан
    6 комментариев
  • Вывод атрибутов в Woocommerce для незарегестрированынх пользоватлей?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Вы же в этой строке
    get_the_terms( $product->id, 'pa_color');
    запрашиваете атрибуты только цвета, вот и получаете Blue везде. Вставьте код в вопрос по-человечески, чтоб все можно было прочитать, вместе с разметкой

    UPD Лучше вообще вот так.. просто удалите табу с характеристиками для залогиненых пользователей
    Этот код в functions.php
    add_filter( 'woocommerce_product_tabs', 'woo_remove_product_tabs', 98 );
    
    function woo_remove_product_tabs( $tabs ) {
    
        if ( is_user_logged_in() ) {
               unset( $tabs['additional_information'] );  	
        }
    
        return $tabs;
    
    }


    UPD 2 Копируете product_attributes.php себе в тему
    И в цикл вывода атрибутов вставляете свое условие:
    <?php $names = array ('один атрибут', 'второй атрибут') //имена атрибутов, которые не будем показывать
    
    foreach ( $attributes as $attribute ) :
       
       if ( !is_user_logged_in() && in_array($attribute['name'], $names ) { 
             continue;  //пропускаем атрибут
        }
        if ( empty( $attribute['is_visible'] ) || ( $attribute['is_taxonomy'] && ! taxonomy_exists( $attribute['name'] ) ) ) {
          continue;
        } else {
          $has_row = true;
        }
        ?>
        <tr class="<?php if ( ( $alt = $alt * -1 ) == 1 ) echo 'alt'; ?>">
          <th><?php echo wc_attribute_label( $attribute['name'] ); ?></th>
    //далее остальной файл
    Ответ написан
    3 комментария
  • Добавить иконку атрибута товара Wocommerce?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Я когда-то делал, но делал костылями. Делаете вывод вариации радиокнопками, а не селектом. Самим input radio ставите display:none, а label стилизуете как вам нужно, и ставите на bg картинку. там у них id должны быть уникальные по имени атрибута.
    Ответ написан
    6 комментариев
  • Где находится шаблон Checkout в woocommerce?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Вот здесь есть про re-ordering. Вам нужно в хуке собрать массив с полями в нужном порядке https://apppresser.com/woocommerce-checkout-custom...
    Ну и есть куча плагинов для настройки полей заказа.
    Ответ написан
    3 комментария
  • Что я не так сделал по поиску по условиям Wordpress?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    "Что я не так сделал по поиску " - вы не сделали вообще ничего. Почему у вас ширина, высота и диаметр не в форме? Как вы хотите получить их значения при отправке формы? Почему они выводятся статикой, а не выбираются из существующих значений атрибутов? Где у вас обработка $_GET ? Вам нужно все селекты поместить в форму, action у формы на текущий адрес, в functions.php написать хук в pre_get_posts, где собирались бы данные из $_GET и строился бы запрос c meta_query с нужным вам отношением OR или AND. Я бы попробовал бы так. Но не рекомендую изобретать велосипедов. Есть несколько готовых плагинов. Например https://wordpress.org/plugins/woocommerce-ajax-filters/
    Ответ написан
    4 комментария
  • Как вывести атрибуты товара woocommerce в списке товаров?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Попробуйте так.

    add_action( 'woocommerce_after_shop_loop_item_title', 'show_attributes', 20 );
     
    function show_attributes() {
    global $product;
    if ($product->product_type == 'variable') {
            $attributes = $product->get_attributes();?>
            <ul>
                <?php  $variations_ids = $product->get_children();
                foreach ($variations_ids as $variation_id) {
                    $variation = $product->get_child($variation_id);
                    $variation_data = $variation->get_variation_attributes();
                    $attributes     = $variation->parent->get_attributes();
                    $description    = array();
                    $attr_name        = '';
    
                    if ( is_array( $variation_data ) ) {
    
                        foreach ( $attributes as $attribute ) {
    
                            if ( ! $attribute[ 'is_variation' ] ) {
                                continue;
                            }
    
                            $variation_selected_value = isset( $variation_data[ 'attribute_' . sanitize_title( $attribute[ 'name' ] ) ] ) ? $variation_data[ 'attribute_' . sanitize_title( $attribute[ 'name' ] ) ] : '';
                            $description_name         = esc_html( wc_attribute_label( $attribute[ 'name' ] ) );
                            $description_value        = __( 'Any', 'woocommerce' );
    
                            if ( $attribute[ 'is_taxonomy' ] ) {
    
                                $post_terms = wp_get_post_terms( $variation->id, $attribute[ 'name' ] );
    
                                foreach ( $post_terms as $term ) {
                                    if ( $variation_selected_value === $term->slug ) {
                                        $description_value = esc_html( apply_filters( 'woocommerce_variation_option_name', $term->name ) );
                                    }
                                }
    
                            } else {
    
                                $options = wc_get_text_attributes( $attribute[ 'value' ] );
    
                                foreach ( $options as $option ) {
    
                                    if ( sanitize_title( $variation_selected_value ) === $variation_selected_value ) {
                                        if ( $variation_selected_value !== sanitize_title( $option ) ) {
                                            continue;
                                        }
                                    } else {
                                        if ( $variation_selected_value !== $option ) {
                                            continue;
                                        }
                                    }
    
                                    $description_value = esc_html( apply_filters( 'woocommerce_variation_option_name', $option ) );
                                }
                            }
    
                            $description[] =  rawurldecode( $description_value );
    
                        }
                        $attr_name .= implode( '', $description );
    
                    } ?>
                    <li><?php echo $attr_name;?> - <?php echo $variation->get_price_html();?></li>
               <?php } ?>
            </ul>
        <?php }
    }
    Ответ написан
    7 комментариев
  • Как вывести уникальное меню категории для каждой категории товара woocommerce?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Потому что функция has_term проверяет наличие термина у поста. "Если пост имеет категорию "пример"" - вы вот это проверяете. А если функция еще и не внутри цикла, то нужно передавать ID поста. Вам нужно использовать is_tax();
    Вот так
    if ( is_tax( 'product_cat', 'primer' )) {
          $args = array(
            'theme_location' => 'sidebar-menu',
            'menu_class' => 'sidebar-nav',
          );
          wp_nav_menu($args);
        }
        else{
          $args = array(
            'theme_location' => 'sidebar-menu-2',
            'menu_class' => 'sidebar-nav',
          );
          wp_nav_menu($args);
        }
    Ответ написан
  • Какой есть плагин магазина для Wordpress на поддомен или /shop?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Woo после установки создаст необходимые страницы: Магазин (страница с выводом всех товаров, по умолчанию слаг - shop), Корзина, Оформление заказа, Личный кабинет. Все шаблоны для вывода товаров естественно в плагине есть. Но вас никто не избавляет от необходимости написать тему. В теме woo использует шаблон woocommerce.php для своих страниц, в котором одна функцияwoocommerce_content() , которая определяет тип страницы и подтягивает нужный шаблон из шаблонов в самом плагине. Все шаблоны вы можете переопределять и кастомизировать. Оставляете главную на сайте как есть. index.php, например, или как у вас сейчас, я не знаю. Там вероятно есть header.php и footer.php. Создайте header-shop.php и footer-shop.php для использования на страницах магазина. Подключайте так get_header('shop'); Еще почитайте здесь virtum.com.ua/sozdanie-temy-dlya-woocommerce-kratk...
    Ответ написан
    Комментировать
  • Сортировка товаров в админке Woocommerce?

    Palych_tw
    @Palych_tw Автор вопроса
    Типа веб-разработчик
    Нашел решение. Может пригодится кому. Вот готовое решение в functions.php
    add_filter( 'manage_edit-product_sortable_columns', 'my_product_sorting_column' );
    
    function my_product_sorting_column( $columns ) {
        $columns['is_in_stock'] = 'in_stock';
    
        return $columns;
    }
    add_action( 'pre_get_posts', 'my_product_sorting' );
    
    function my_product_sorting( $query ) {
    
        if( ! is_admin() )
            return;
    
        $orderby = $query->get( 'orderby');
    
        if( 'in_stock' == $orderby ) {
            $query->set('meta_key','_stock_status');
            $query->set('orderby','meta_value');
        }
    }

    Данный код делает уже существующую колонку сортируемой, в хук pre_get_posts добавляет саму сортировку. Почитать подробнее можно здесь wp-kama.ru/id_995/dopolnitelnyie-sortiruemyie-kolo...
    Здесь, в том числе, добавление своей колонки в админку (у нас колонка уже есть).
    Ответ написан
    Комментировать
  • Как вывести подкатегории товаров на страницу категории?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Woo умеет это сам. Заходите в категорию и ставите вид отображения
    8d3f69739f2e4edeb00f93e8f0fc3f1f.png

    UPD
    wp-kama.ru/function/get_terms
    Простой пример. выведем дочерние категории для категории с id 30
    <ul>
    <?php
         $terms = get_terms( 'product_cat', array( 'child_of' => 30,  ) );
         foreach ($terms as $term) {
         echo '<li><a href="'.get_term_link($term,'product_cat').'">'.$term->name.'</a></li>';
     } ?>
    </ul>
    Ответ написан
  • Как в woocommerce задать единицу измерения?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    wp-content/plugins/woocommerce/templates/global/quantity-input.php - этот шаблон выводит поле ввода
    Копируете себе в wp-content/themes/тема/woocommerce/global/quantity-input.php и изменяете разметку как вам нужно.
    Ответ написан
  • Импорт товаров Woocommerce через CSV?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    WP All Import импортирует отлично. Или в настройках чего не так, или с файлом. Вы поставили расширение для этого плагина для Woo? https://wordpress.org/plugins/woocommerce-xml-csv-...
    Ответ написан
    Комментировать
  • Как сделать отправку письма "Новый заказ" и мне и клиенту?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Так клиенту и так отправляется письмо. Это статусы "в обработке" и "на удержании". Новый заказ создается с одним из этих статусов в зависимости от выбранного способа оплаты. И отправляется письмо "Квитанция вашего заказа". Это вещи сами собой разумеющиеся и настроены по умолчанию.
    bd3356f70d764487975b97a75f051338.png

    UPD

    Вы меня заставили засомневаться. но нет, вот письмо такое приходит клиенту
    50176ff6275d4cdeb76f152d327644f0.png

    Перепроверьте включены ли письма покупателю. Настроек там особых кроме темы и заголовка нет. И только галочка "включить" Форму заказа вы не кастомизировали никакими плагинами или вручную? Может вы поле почты поменяли на свое. Хостинг воббще разрешает отправку писем с сайта? часто на бесплатных хостингах функция недоступна. Посмотрите на почте, указанной в админке хостинга, отчеты о недоставленных письмах.

    UPD2
    Вот письмо при оформлении заказа с оплатой наличными
    e44c6ffb838141e3b158e92ff0e95eea.png
    Ответ написан
    6 комментариев