Ответы пользователя по тегу WordPress
  • Почему slick slider не работает в wordpress?

    @Chloyka
    Мало подключить slick, что-то должно его инициализировать, чтобы слайдер заработал.
    предположим, что его инициализирует mk_scripts
    Тогда получается, что с большой долей вероятности, не имея зависимостей и указания, когда его вывести он прочитается раньше, чем jquery и slick, в таком случае ничего работать не будет.
    Ошибок в таком случае может и не быть, например потому, что в js используется try catch или проверка на существование slick объекта
    Ответ написан
    Комментировать
  • Добавление/удаление из корзины выбранных на сайте товаров ( через +/- ), не переходя в корзину?

    @Chloyka
    Вам поможет WC_Cart
    Напишите RestAPI или admin_ajax точку, принимающую 2 параметра:
    1. product_id
    2. qty

    Далее вам необходимо осуществить проверку на наличие товара в корзине, пример:

    global $woocommerce
    $cart = $woocommerce->cart;
    foreach($cart->get_cart() as $cart_item_key => $cart_item){
        // var_dump($cart_item); 
    }

    Где $cart_item_key - ключ товара в корзине, а $cart_item - его содержимое
    Если так произошло, что товар уже есть в корзине и нам нужно увеличить или уменьшить его количество достаточно сделать
    $cart->set_quantity($cart_item_key, $qty);
    // $qty - переданное количество товаров

    иначе - просто добавляем товар в корзину с помощью метода add_to_cart() класса WC_Cart
    Пример добавления в корзину:
    global $woocommerce
    $cart = $woocommerce->cart;
    $cart->add_to_cart($product_id, $quantity);
    Ответ написан
    Комментировать
  • Как на wp можно реализовать фильтр постов по дате?

    @Chloyka
    По дате - нет проблем. Все, что нужно - сделать strtotime кастомного поля. Например:
    $params = array(
    'post_type' => 'events', //кастомный тип постов, меняй на любой
    );
    $posts = get_posts($params); //получаем массив постов
    $events_date = wp_list_pluck( $posts, 'event_date'); //получаем массив из кастомного поля с датой 
    $res = array_unique($events_date); //Удаляем дубликаты
    function date_sort($a, $b) {
    return strtotime($a) - strtotime($b);
    }
    usort($res, "date_sort"); // сортируем по возрастанию дат
    Далее все просто, запускаем цикл
    
    if( $res ){
    foreach( $res as $result ){
    $args = array( //задаем аргументы wp_query
    'post_type' => 'events', //тип поста
    'showposts' => 3, //сколько постов
    'meta_key' => 'event_time', //по какому полю сортируем
    'orderby' => 'meta_value_num', 
    'order' => 'ASC', //возрастание или убывание
    );
    query_posts($args); 
    
    if ( have_posts() )
    
    while ( have_posts() ) : the_post();
    
    get_template_part( 'template-parts/content-events', get_post_format() ); //относительная ссылка на твой шаблон
    
    endwhile;
    
    }
    };


    На этом все

    Что касается удаления просроченных постов - их не обязательно удалять, можно просто не включать в цикл, например:

    //Цикл
    if ( have_posts() )
    //Для функции date() обязательно используем date_default_timezone_set("Временная зона"), в противном случае получим дату по GMT +0, а нам нужно к примеру по МСК
    date_default_timezone_set("Europe/Moscow");//Используем зону МСК для примера, с списком доступных таймзон можно ознакомится в гугле, например
    $forBefore = strftime("%d.%m.%Y", strtotime($result)); //получаем дату поста
    $forToday = date("d.m.Y"); //сегодняшняя дата
    
    if (strtotime($forToday) >= strtotime($forBefore)){ //Если дата равна или больше сегодняшней
    
    while ( have_posts() ) : the_post();
    
    get_template_part( 'template-parts/content-events', get_post_format() ); //относительная ссылка на твой шаблон
    
    endwhile;
    }
    };

    Соответственно, если дата поста просрочена - пост просто не будет выводится, это может пригодится, чтобы например просто перенести дату предыдущей экскурсии и не заполнять заново
    Ответ написан
  • Как вывести отзывы о товаре в корзине/чекауте Woocommerce?

    @Chloyka Автор вопроса
    И так, спустя много часов мною был обнаружен ответ. Для вывода комментариев к товару в корзине, используем конструкцию
    $comments = get_comments(array(
    				'post_id' => $product_id,
    				'status' => 'approve'
    			));
    
    
    			wp_list_comments(array(
    				'per_page' => 10,
    				'reverse_top_level' => false
    			), $comments);

    В cart.php
    Что касается вывода на странице чекаута. В моем случае содержимое страницы корзины имеет следующее содержимое
    [woocommerce_cart][woocommerce_checkout]
    Однако вывести комментарии отдельно в шаблон чекаута не вышло. Так, как в моем случае страница корзины содержит сразу корзину и чекаут, я решил реализовать комментарии в чекауте через shadow-dom.
    Вставляем в код cart.php
    <template id="commentslabel_comments">
    	<div class="commentlist">
    <?php
    			$comments = get_comments(array(
    				'post_id' => $product_id,
    				'status' => 'approve'
    			));
    
    
    			wp_list_comments(array(
    				'per_page' => 10,
    				'reverse_top_level' => false
    			), $comments);
    		?>
    	</div>
    </template>

    <script>
    jQuery(document).ready(function(){
      var root = commentslabel.attachShadow({ mode: 'closed' });
    	root.appendChild(commentslabel_comments.content.cloneNode(true));
    });
    </script>

    Остается только внести в содержимое form-checkout.php
    <div id="commentslabel">
    </div>

    На этом все, дело раскрыто!
    Ответ написан
    Комментировать