• Как в Woocommerce вывести вариации отдельными товарами с помощью php?

    @NickToot
    web developer
    Можно изменить стандартный запрос получения товаров WooCommerсe (добавьте код в functions.php или в отдельный файл который подключается в него):
    add_action( 'woocommerce_product_query', 'custom_woocommerce_product_query' );
    function custom_woocommerce_product_query ($q) {
      $q->set( 'post_type', array( 'product', 'product_variation' ) );
      return $q;
    }

    У вас выведутся все товары и все их вариации, я думаю это будет избыточно, тогда нужно изменить этот запрос под себя, условиями или как-нибудь еще если вы умеете. Я добавил галочку для вариаций отображать в каталоге или нет и получаю только отмеченные товары, простые товары при этом запросе пропадают, мне этого было достаточно:
    /**
     *  Добавление своего поля для вариаций
     */
    add_action( 'woocommerce_variation_options', 'add_custom_field_to_variations', 10, 3 );
    function add_custom_field_to_variations( $loop, $variation_data, $variation ) {
    $checked = get_post_meta( $variation->ID, 'catalog_visibility', true ) ) ? 'checked="checked"' : '';
    ?>
      <label>
        Показать в каталоге?
        <input type="checkbox" class="checkbox" name="catalog_visibility[<?= $loop ?>]" <?= $checked; ?>/>
      </label>
    <?php
    }
    
    /**
     *  Сохранение в админке своего поля для вариаций
     */
    add_action( 'woocommerce_save_product_variation', 'save_custom_field_variations', 10, 2 );
    function save_custom_field_variations( $variation_id, $i ) {
      $catalog_visibility = $_POST['catalog_visibility'][$i];
      if ( $catalog_visibility ) {
        update_post_meta( $variation_id, 'catalog_visibility', true );
      } else {
        delete_post_meta( $variation_id, 'catalog_visibility' );
      }
    }
    
    /**
     *  Добавление вариативных товаров в каталог
     */
    add_action( 'woocommerce_product_query', 'custom_woocommerce_product_query' );
    function custom_woocommerce_product_query ($q) {
      // Добавление вариаций в каталог
      $q->set( 'post_type', array( 'product', 'product_variation' ) );
      // Оставляем только вариации в каталоге
      $meta_query = (array) $q->get( 'meta_query' );
      $meta_query[] = array(
        'key'      => 'catalog_visibility',
        'value'    => '1',
      );
      $q->set( 'meta_query', $meta_query );
      return $q;
    }
    Ответ написан
  • Woocommerce Как поменять текст кнопки added_to_cart?

    @NickToot
    web developer
    За более чем 3 года так никто и не ответил, как-то печально.. Столкнулся с такой же задачей, долго искал, как оказалось эта кнопка вставляется из js файла, а там подставляется переменная с переводом, нашел в интернете пример, как с помощью фильтра можно переопределить этот перевод:
    /**
     * Изменение текста на кнопке "Перейти в корзину"
     */
    add_filter( 'woocommerce_get_script_data', 'change_view_cart', 10, 2 );
    function change_view_cart( $params, $handle ) {
      if ( $handle == 'wc-add-to-cart' ) {
        $params['i18n_view_cart'] = "Оформить заказ";
      }
    	
      return $params;
    }
    Ответ написан
    1 комментарий
  • Почему все письма с сайтов на VPS с ISPmanager уходят в спам или не доходят?

    @NickToot Автор вопроса
    web developer
    Всем спасибо за ответы, они полезные, но ответ от технической поддержки REG.RU стал решающим, потому что с "левым" отправителем кроме спама никуда не приходило.


    Адрес отправителя указан в php.ini файле той версии php, которую использует сайт. Обычно такие файлы расположены в директории вида /var/www/user/data/php_version/php.ini. В самом низу есть блок настроек [ISPmanager]. Вам нужно найти в нём sendmail_path и заменить webmaster@example.com на почту на базе вашего домена, жалетельно существующую.

    Для отправки на основные почтовые сервисы достаточно будет настроить SPF запись, hostname на сервере и PTR запись для IP. С gmail будет сложнее. Тут уже можно настроить DKIM подпись и отправлять через smtp с авторизацией, но суровый фильтр google всё равно может помечать такие письма как спам. В этом случае можно попытаться обучить фильтр. Для этого пометьте сообщения как "Не спам".
    Ответ написан
    Комментировать
  • Какая JavaScript-библиотека для построения графиков подойдет?

    @NickToot Автор вопроса
    web developer
    Всем спасибо за ответы, да D3.JS очень крутая и мощная штука, HighCharts.js тоже, но для одного простого линейного графика тащить такие огромные и сложные библиотеки мне не хотелось бы.
    Как оказалось в Chart.JS все таки есть возможность переопределить названия подписей оси Y,
    вот пример кода, который делает то что мне надо, да коряво, но для не совсем стандартного графика подойдет :)
    var myLineChart = new Chart(ctx, {
    	type: 'line',
    	data: {
    		labels: ['01.06.2016', '02.06.2016', '03.06.2016', '04.06.2016'],
    		datasets: [{
    			label: 'занятые места в конкурсах',
    			data: [1, 3, 2, 4]
    		}]
    	},
    	options: {
    		scales: {
    			yAxes: [{
    				ticks: {
    					callback: function(value, index, values) {
    						if (value == 4) {
    							return "1 место";
    						} else if (value == 3) {
    							return "2 место";
    						} else if (value == 2) {
    							return "3 место";
    						} else if (value == 1) {
    							return "участник";
    						} else {
    							return "";
    						}
    					}
    				}
    			}]
    		}
    	}
    });

    Результат:
    88475704ed944b21b4a1f94b1d2463f7.png
    Ответ написан
    Комментировать
  • Как лучше сверстать три блока?

    @NickToot
    web developer
    Добавь свойство display со значением inline-block.
    section#three .desc1,
    section#three .desc2,
    section#three .desc3{
        width: 300px;
        height: 212px;
        text-align: center;
        display: inline-block;
    }
    Ответ написан
    7 комментариев
  • Не устанавливается Grub во время установки elementary OS. Что делать?

    @NickToot Автор вопроса
    web developer
    Решилась проблема, магия в общем :) После того, как восстановил загрузчик windows, на следующий день решил попробовать еще раз поставить grub по первому способу, в конце опять было предупреждение, но после перезагрузки открылся Grub с выбором ОС.

    UPD: установил другой образ elementary OS, более старую версию, нашел у себя на компе случайно, встала отлично с grub. Так что если у кого-нибудь будет такая проблема, то или пользуйтесь инструкцией восстановление GRUB или ставьте другой образ ОС.
    Ответ написан
    Комментировать