• Как изменить изображение вариативного товара в каталоге при фильтрации?

    MaximusDem
    @MaximusDem Автор вопроса
    Роберт Плант, нет...В итоге решили сделать цвет товара не вариацией (и, соответственно, были показаны в каталоге все варианты товара по цвету), а все остальные аттрибуты сделали вариациями. Так решил СЕо-шник и клиент согласился (так как мало было товаров), а мне и проще)
  • Как заставить заработать связаные select при динамически загружаемом содержимом из повторителя ACF?

    MaximusDem
    @MaximusDem Автор вопроса
    Пробовал через делегирование (к родительскому селектору), все равно нормально не работает...Напишу как сделал, может кому пригодится...Сделал в итоге вообще без библиотеки jquery chained. Просто при загрузке страницы дефолтные значения определяю через bind() , а при клике на элементы ловлю через .on('click', function (event). Затем все что мне нужно, передаю через AJAX, ответ фильтрую по нужному id (которое до этого передавал в обработчик). А затем уже отрисовываю на странице все что мне нужно (то, что мне нужно передать в форму - пишу в скрытые input). Костыли, конечно, но вроде все работает...
  • Как сделать пошаговый конструктор чего-либо (лучше без Woocommerce)?

    MaximusDem
    @MaximusDem Автор вопроса
    Я и не спорю, что это пошаговая форма. Просто спрашивал может +- похожий плагин есть для Вордпресса, который бы переписал под себя съэкономив время на разработку.
    Так как если делать с нуля, то одной версткой для сайта на Вордпрессе не обойтись, нужно писать полноценный плагин(если мы хотим, чтобы не программист все постоянно редактировал, а редактор или владелец сайта, которые в программировании могут быть не очень):
    1) Ввод новой сущности(по сути, вид товара) - блокнот, ремень, и т.д. И под них, по идее, нужны свои отдельные формы, которые либо выводятся через шорткод, либо еще как (но формируются через поля в админке)
    2) Поля в админке для ввода вариантов товаров(+связь полей между собой, +стоимость, +просчет в конце, + отправка формы).
    3) Фронтенд. Вывод из всего того, что пользователь в админке заполнил и формирование формы.

    Если бы эту форму не нужно было бы редактировать никому, кроме программиста - я бы с вами согласился и сделал бы простую пошаговую форму. Но простой редактор ничего с ней не сделает, к сожалению....
  • Как подставить значения в select cf7?

    https://www.vchuy-develop.com/peredat-get-parametr...
    встречал такой вариант, как раз передача селекта в подготовленную форму cf7. А там уже нужно думать, как все это слепить вместе...
  • Как подставить значения в select cf7?

    https://ru.stackoverflow.com/questions/725737/%D0%...

    Может таким путем?
    Алгоритм по сути тот же:
    1) Получить данные из первой формы
    2) Передать их в переменную (или сделать массив ,если мультиселект, а потом пройтись по массиву)
    3) Через js сравнить поля формы передающей и принимающей и передать значения из одной формы в другую (точнее добавить аттрибут селектед нужному селекту)

    Как то сумбурно получилось)
  • Как сделать простой товар, но с некоторыми возможностями вариативного?

    MaximusDem
    @MaximusDem Автор вопроса
    Спасибо вам огромное! Все заработало! Все таки недостаток знаний дает о себе знать(((
    Разобрался...Оказывается, я с какого-то перепугу пытался пройти по $post, хотя непосредственно обращался к $clrpost. И потом еще с этими сравнениями...Вы в своем примере обращались к функции get_sku() для получения артикулов, и я самонадеянно подумал, что могу так же обратится к $test, в которую я вывел значения артикулов из нового кастомного поля ...Спасибо вам за подсказку!Теперь все отлично работает!
  • Как сделать простой товар, но с некоторыми возможностями вариативного?

    MaximusDem
    @MaximusDem Автор вопроса
    Спасибо!Этот момент я тоже механически скопировал, по принципу- работает, не трогай))
    А подскажите, пожалуйста, такой момент по вашему коду:
    - Как я понял, вы здесь сначала получили массив продуктов, потом установили для них нулевую рамку. Затем вы прописали условие о том, что если элемент не принадлежит массиву (который вызывается get_sku()) то он имеет другую рамку?
    $prd = wc_get_product( $clrpost );
                    $color = substr($prd->get_sku(), 8, 4);
                    $imgcss = 'border: 0px solid black;';
                    if ( $sku == $prd->get_sku() ) { $imgcss = 'border: 1px solid black;'; }
                    $imgcss = $imgcss . ' margin: 2px; padding: 2px;';

    У меня массив новых артикулов находится через
    $test = get_post_meta( $post->ID, '_newsku', true ); т.е я , по сути, прохожу по post_meta товаров с ключом _newsku, получая то что мне нужно... Все вроде работает, но!
    Когда я пробую по условию отсортировать
    if ( $newsku == $prd->$test ) { $imgcss = 'border: 1px solid black;'; } , то рамку оно не дает)
    Я в php не сильно специалист, подскажите куда можно копать? Как я понимаю, надо как-то сравнить, имеет ли данная миниатюра товара новый артикул точно совпадающий с артикулом текущего товара...Если да - то показывать рамку, если есть хоть какое-то отличие - то нет...Но как их сравнить???
  • Как сделать простой товар, но с некоторыми возможностями вариативного?

    MaximusDem
    @MaximusDem Автор вопроса
    Огромное спасибо за ваш плагин! Только ньюанс возник))) У клиента странная база данных товаров (И у одинаковых товаров с разными цветами - очень разные артикулы, вообщем отсортировать по первым цифрам не выйдет). Артикулы клиент менять не хочет (товары идут с артикулами поставщика). Решил проблему с помощью кастомных полей и вашего плагина, немного его переработав:
    1) Создал кастомное поле newsku;
    2) Вывел его в админке (на фронте назвал "Код товара");
    3) Переработал ваш плагин, сделав сортировку по тому же массиву, но по другому ключу.
    Код переделки, может кому пригодится
    spoiler

    <?php
    /**
    * @version 1.0
    */
    /*
    Plugin Name: Выбор расцветок товара 
    Description: Плагин для отображения товаров других расцветок товара.
    Author: Anatoliy Pychev (Rebuild for Maksym Demydow)
    Version: 1.0
    Author URI:
    */
    
    class Hummel_Color_Upsells_Plugin {
    
        private static $notices = array();
        
      public static function init() {
    
        register_activation_hook( __FILE__, array( __CLASS__, 'activate' ) );
        register_deactivation_hook( __FILE__, array( __CLASS__, 'deactivate' ) );
        register_uninstall_hook( __FILE__, array( __CLASS__, 'uninstall' ) );
    
        add_action( 'init', array( __CLASS__, 'wp_init' ) );
        add_action( 'admin_notices', array( __CLASS__, 'admin_notices' ) );
      }
    
      public static function wp_init() {
        $active_plugins = get_option( 'active_plugins', array() );
        $woocommerce_is_active = in_array( 'woocommerce/woocommerce.php', $active_plugins );
        if ( !$woocommerce_is_active )  {
          self::$notices[] = '<div class="error"><p><strong>Hummel Orders Exporter Plugin</strong>  требуется наличие активнокго плагина Woocommerce.</p></div>';
        } else {
    
          // добавляем обработчик 
                add_action( 'woocommerce_before_add_to_cart_form', array( __CLASS__, 'display_color_upsells' ), 10 );
     
            }
        }  
    
        /**
         * Выводит на фронт миниатюру этого же товар в другой расцветке
         */
        public static function display_color_upsells() {
            global $post, $woocommere, $product;
    
            //error_log(__METHOD__ . PHP_EOL , 3, WP_PLUGIN_DIR . '/hummel-color-upsells/log.log');
    		$test = get_post_meta( $post->ID, '_newsku', true );
    		$newsku = $test;
    
    if ( !$newsku || 'bndl' == substr( $newsku, 0, 4 ) ) { return; }
    
            $article = substr( $newsku, 0, 7 );
    
            $args = array(
                'post_type' => 'product',
                'post_status' => 'publish',
                'numberposts' => -1,
                'meta_query' => array( 
                    array(
                        'key' => '_newsku',
                        'value' => $article,
                        'compare' => 'LIKE',
    
                    ),
    				 array(
                		'key' => '_stock_status',
    					'value' => 'instock'
    
                    )	
    				)
            ) ;
            $clrposts = get_posts($args);
    		
    //print_r( $args );
    
    
            if ( $clrposts ){
    if( $product->is_type( 'variable' ) ){
                     echo '<p id="linked" style="margin: 0px;"><strong>Этот товар в другом цвете</strong></p>';
    				 echo '<div class="color-upsells" style="display:flex; display:-ms-flexbox;">';
    				}
    				elseif( $product->is_type( 'simple' ) ){
                    echo '';
    				}		
    				
    
                foreach( $clrposts as $clrpost ){ 
                    $prd = wc_get_product( $clrpost );
    				//print_r( $clrpost );
                    $color = substr($prd->$test, 8, 4);
    				
    				$imgcss = 'border: 0px solid black;';
                    if ( $newsku == $prd->$test ) { $imgcss = 'border: 1px solid black;'; }
                    $imgcss = $imgcss . ' margin: 2px; padding: 2px;';
                    
                    $html = '<a href="' . get_permalink( $clrpost ) . 
                            '" title="' . $color .
                            '" alt="' . esc_attr( get_the_title( $clrpost ) ) . 
                            '">' .  get_the_post_thumbnail($clrpost, array(45,45), array('style' => $imgcss)  )  .
                            '</a>';
                    
    				if( $product->is_type( 'variable' ) ){
                    echo $html;
    				}
    				elseif( $product->is_type( 'simple' ) ){
                    echo '';
    				}
                }
    			
    			
    			
    if( $product->is_type( 'variable' ) ){
                      echo '</div>';
    				}
    				elseif( $product->is_type( 'simple' ) ){
                    echo '';
    				}
    			
    			
    			
    			
    			
         
        }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        
        }
        /**
       * Plugin display notices.
       * 
       */
      public static function admin_notices() { 
        if ( !empty( self::$notices ) ) {
          foreach ( self::$notices as $notice ) {
            echo $notice;
          }
        }
      }
    
        /**
       * Plugin activation work.
       * 
       */
      public static function activate() {
      }
    
      /**
       * Plugin deactivation.
       *
       */
      public static function deactivate() {
      }
    
      /**
       * Plugin uninstall. 
       *
       */
      public static function uninstall() {
      }    
    }
    Hummel_Color_Upsells_Plugin::init();

  • Как сделать простой товар, но с некоторыми возможностями вариативного?

    MaximusDem
    @MaximusDem Автор вопроса
    Пычев Анатолий, остановился на вариативных товарах, так какв случае простых возникает офигенное множество вариантов товара)) И в итоге на странице около 20-30 вариантов одного товара, что вообще не вариант) Использовал ваш плагин для вариативных товаров, только сделал в самом плагине проверку на наличие товара и вывод только для вариативных товаров (на простых его не вывожу)
  • Как изменить изображение вариативного товара в каталоге при фильтрации?

    MaximusDem
    @MaximusDem Автор вопроса
    Спасибо за ваш ответ. Это стандартный вариативный товар в котором связи между вариациями осуществлены с помощью стандартных атрибутов woocommerce. Соответственно и картинка вариации привязана к вариации.5d92fab2e9c8b009857080.jpeg
    Вот как здесь, например. Цвет вариации - черный, фото на вариации с черным кроссовком. А заглавное фото с зеленым кроссовком.
    Атрибуты тоже сделаны стандартным для Woocommerce способом и нужные выведены в вариативном товаре. 5d92fb9fd4d84081165638.jpeg
  • Как сделать простой товар, но с некоторыми возможностями вариативного?

    MaximusDem
    @MaximusDem Автор вопроса
    Спасибо за ваш вариант! Попробую его переписать под свои нужды, результат выложу сюда, может еще кому пригодится.
  • Как сделать простой товар, но с некоторыми возможностями вариативного?

    MaximusDem
    @MaximusDem Автор вопроса
    Спасибо за ваше решение, но я пробовал этот плагин. К сожалению здесь возникли свои ньюансы:
    1) На странице каталога кроме дочерних вариаций показывается и товар-родитель (если его так можно назвать). В принципе решаемо, но опять же костыли.
    2) Ньюансы пакетного редактирования вариаций. Очень неудобно массово редактировать товары где есть подобные вариации. Использовал Advanced Bulk Edit. С простыми товарами проблем нет.
    3) УРЛ формируется вида - урл родительского товара+ get запрос, типа https://site/shina28/?attribute_pa_diametr=30&attr... Можно заморочиться rewrite rule, но опять же костыли(((
    4) Нормально не работает функция по замене цены согласно курса валют (но, это уже,видимо, мои баги, и все равно писать костыли).
    Так что с этим плагином не вариант, к сожалению(((
  • Что это за ошибка в WOO Задайте значение для одного из следующих элементов данных: "offers", "review" или "aggregateRating".?

    По поводу Breadcrumb...У меня был похожий проект, я как делал - ставил плагин breadcrumb navxt и в его настройках через админку все правил.
    1) Для страниц прописывал
    <span itemprop="itemListElement" property="itemListElement" typeof="ListItem" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" property="item" typeof="WebPage" title="%title%." href="%link%" class="%type%"><span itemprop="name" property="name">%htitle%</span></a><meta itemprop="position" property="position" content="%position%"></span>

    2) Для категорий товаров
    <span property="itemListElement" typeof="ListItem" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
    <a itemprop="item" property="item" typeof="WebPage" title="%title%" href="%link%" class="%type%">
    <span itemprop="name" property="name">%htitle%</span></a>
    <meta itemprop="position" property="position" content="%position%">
    </span>

    3) Для товаров
    <span itemprop="itemListElement" property="itemListElement" typeof="ListItem" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" property="item" typeof="WebPage" title="%title%." href="%link%" class="%type%"><span itemprop="name" property="name">%htitle%</span></a><meta itemprop="position" property="position" content="%position%"></span>

    Вроде как то так...

    Потом все проверял через https://developers.google.com/structured-data/test...
  • Что это за ошибка в WOO Задайте значение для одного из следующих элементов данных: "offers", "review" или "aggregateRating".?

    "Установил этот код, ошибки пропали, но не совсем понятно из статьи, удаление разметки не приведет к чему-то плохому?" - это один Гугл, к сожалению, знает)))))
  • Можно ли связать языковые домены?

    Через веб-зацепы API Woocommerce? Хм...Брать данные из магазина в момент заказа, поднимать соединение с удаленной базой (вторым и третьим сайтом) и отправлять данные о заказе туда туда? А там запросом править количество товара в соответствующей таблице?
  • Можно ли связать языковые домены?

    Да, тогда для интернет-магазина не вариант, тем более, если у вас там будет управление запасами включено (т.е конечное количество товара).
    Можно покопаться с плагинами для общего управления интернет-магазинами.
    Встречал такой WooCommerce Multistore. Правда сам с ним не работал, но вроде по функционалу подходит. Пишут "Manage Stock.
    The stock management is handled automatically. You have the option to synchronize the stock quantity of the same products across all your stores. If you need the stores to have different stock quantities that’s also possible." Т.е вроде то, что нужно. Ссылка - https://woomultistore.com/product/woocommerce-mult... . Стоит около 200 долларов.
    Можно поискать нуленый, бесплатно...

    Или подобные, которые позволяют управлять запасами на всех версиях сайта.
    Мне тут попадалась статья, там об этих плагинах есть - https://learnwoo.com/woocommerce-multistore/
  • Woocommerce как настроить оформление категории товаров?

    ms_way, по сути да, здесь логика такая - при наведении на родительский элемент (.woocommerce-page ul.products li.product:hover) дочернему (.woocommerce-product-details__short-description) присваивается нужное свойство.

    В случае с ul.products li.product .woocommerce-product-details__short-description:hover (вашим первым вариантом), действие было бы при наведении на дочерний элемент (.woocommerce-product-details__short-description). А так как дочерний элемент был скрыт (.woocommerce-page ul.products li.product .woocommerce-product-details__short-description {display:none}), то и наводить курсор, по сути, некуда было)
  • Woocommerce как настроить оформление категории товаров?

    ms_way, попробуй так
    .woocommerce-page ul.products li.product .woocommerce-product-details__short-description {display:none}
    .woocommerce-page ul.products li.product:hover .woocommerce-product-details__short-description{display:block}

    Я взял ваши стили , с сайта. Через инспектор работает
  • Каким образом вывести определенные категории по id в Joomshopping?

    MaximusDem
    @MaximusDem Автор вопроса
    Спасибо большое! Нечто наподобие тогда и сделал!
  • Как добавить доп информацию в товар woocommerce?

    Ага, я досмотрел. Сразу не заметил, что там дольше TineMCE прикручивают). Отличная статья! И тема нужная, часто заказывают к карточке товара чего-то прикрутить.