На одном сайте по доставке еды, нужно было провести акцию. Где при заказе двух блюд, можно было выбрать в подарок одно бесплатное. Реализация должна быть на сайте, чтобы покупатель выбрав два определенных блюда, мог сам выбрать подарок и чтобы все это попало в корзину и при оформлении заказа продавец видел подарок. Чтобы меньше тарантить времени оператору на выяснение у клиента какой подарок он хочет.

Сайт по доставке сделан на WordPress + Woocommerce. Поэтому исходя из этого, весь механизм акции был реализован в рамках этой связки. Времени было мало на реализацию, поэтому поступили просто, на сколько это возможно, применив различные «костыли» и ухищрения.

Реализовали это в сниппете для удобства и дальнейшего использования. Из дополнительных «костылей» было лишь заведение новых блюд (клонов) с нулевой ценой и отличными артикулами от оригинала. А также размещением их в других категориях, чтобы не выводить их на основной странице каталога.

И так механизм акции

При заказе двух определенных товаров, проявляется сообщение о возможности выбрать бесплатный подарок. Выбрав подарок, он попадает в корзину с нулевой ценой. Заверщив оформление заказа, оператор получает заказ в котором есть основные товары и подарочный товар.

Реализация акции на сайте

Сайт сделан на wordpress + woocommerce, а также Oxygen.

1. Создали отдельную страницу на которой вывели через шорткод определённые товары которые необходимо заказать в количестве 2 шт.

2. На этой же странице добавили код:

К этому блоку мы привязываем Аякс событие которое срабатывает при добавлении товара в корзину.

3. В сниппетах пишем код который собственно при добавлении очередного товара в корзину проверяет лежат ли товары с определёнными ID в количестве 2 шт. которые должны быть заказаны для возможности выбрать бесплатный подарок.

Сам код

Выкладываю код как есть, чтобы взять при необходимости. По комментариям в коде можно посмотреть что, за что отвечает.

Благодарность

Большое спасибо сайту misha.agency. Именно на нем я нашел реализацию для соей задачи.

Иногда для написаний новостей или текстов, очень привлекательно смотрятся эмодзи, или маленькие иконки. С эмодзи проблема в том, что они не везде отображаются, и по разному. А вот набор своих иконок для сайта — очень полезная вещь.

Чтобы реализовать подобный функционал, необходимо:

Код самого сниппета:

Также нужно подправить немного стиль для этих иконок, чтобы они смотрелись аккуратно в тексте.

На одном из сайтов был установлен плагин CookieYes | GDPR Cookie Consent. Нужно было сделать так, чтобы он появлялся, а внизу у него пробегала полоса загрузки и он исчезал и больше не появлялся на этом устройстве.

Поступил очень просто, в настройках плагина указал, чтобы он скрывался автоматически через 20 секунд.

А затем прописал код в сниппете, в котором скрипт отвечающий за анимацию полосы загрузки, которая длится тоже 20 сек, а также стили для самого окошка.

В итоге получилось такое окошко с текстом о куках, которое автоматически скрывается, а по индикатору загрузки видно, сколько ему осталось.

На одном из сайтов необходимо было сделать, чтобы во время нерабочего времени писалось, что офис закрыт, а в рабочее отрыт. Для этого был написан небольшой сниппет, выкладываю его тут, там куски кода отвечающие за разные стили в разное время суток и разные надписи. А также кусок кода который умеет склонять в зависимости от количества. В данном случае это врямя: 1 час, 2 часа, . . . 5 часов.

Нужно быстро сделать какое-нибудь действие на сайте, чтобы записать его в куки и запомнить на этом устройстве. Это допустим всплывающее окошко, которое предупреждает о чём-то и после его закрытия не появляется еще долго.

На выручку пришел сайт https://codernote.ru/jquery/rabota-s-cookies-na-jquery/ на нем подробно описано как это реализовать.

Я же реализовал так:

Скачал файл с github.com

Подключил его, при условии, что библиотека jQuery подключена.

На странице, где мне нужна была появляющаяся подсказка добавил код с блоком:

Прописал скрипт, который проверяет определена ли кука и если нет, до добавляет класс к блоку «mobile_hand_scrolle_table» .show_popup при нажатии на это окно, класс .show_popup удаляется, и в куки записывается переменная show_scroll_table=yes и в последствии это окно будет скрыто по истечении 365 дней.

Где expires: 365 - это количество дней жизни переменной,
path: '/' — это для всех страниц сайта установлена кука, можно прописывать конкретный адрес.

А также прописываю стили для блока, чтобы он по умолчанию появлялся, а когда мы по нему кликнули, то скрывался. Конкретно в этом варианте, он появляется один раз только на мобильных устройствах.

После обновления Woocommerce до версии 7.8, перестала пересчитывается общая сумма заказа, когда меняем количество товаров на странице - Корзина. Общая сумма выведена через блок Oxygen oxy-cart-total. Так же не пересчитывается общее количество товаров выведенные через свой код. Так же не работает пересчет в плагине Side Cart WooCommerce если мы на странице Корзины или Оформлении заказа.

РЕШЕНИЕ: помогло решение с форума поддержки плагина Woocommerce.

На сайте добавил следующий код в сниппет, и сумма стала пересчитывается при обновлении количества товаров.

Задача: Есть страница, у неё дочерние страницы. На этих страницах необходимо выводить список PDF файлов, но их много и добавлять вручную лень. Поэтому для простоты, файлы называют русскими буквами и закидываю по FTP на сервер в определенные папки, а там раскидывают по папкам по годам. Нужно вывести список этих файлов и разложить по годам.

Решение: С помощью искусственного интеллекта эта задача решилась за час. Был написан код, который выводит список файлов, а с помощью библиотеки Isotope, которая уже подключена в этом проекте сделан фильтр по годам.

Вот код для сниппета, CSS же выведен отдельно, здесь его не прикладываю.

Вот так это выглядит на фронте

Узкий неразрывный пробел

https://symbl.cc/ru/202F/ особенно полезен когда нужно вставить перед знаком рубль, после цены.

Символ переноса

Браузеры автоматически не расставляют переносы, но в HTML есть возможность указать возможное место переноса с помощью последовательности ­ (так называемый «мягкий перенос»). Символ переноса отображается только в том случае, если перенос слова действительно был выполнен (слово не влезло). Очень удобно его использовать в длинных словах на мобильной версии, когда длинное слово не влезает на экране и получается горизонтальная прокрутка.

Выделение пунктов меню при скролле

При прокрутке странице, подсвечиваются пункты меню. Код для реализации этого эффекта тут https://codepen.io/rishabhp/pen/aNXVbQ

Нужно было на сайте поменять title на свой, чтобы в нем брались данные с переменных в ссылке вида мой.сайт/page/?hash=suvorov-naprimer_1_1_1876_63d51d8a170de

Для этого в сниппете пишем код:

В настройках блока Yoast SEO вставляем свои переменные %%nameuser%% и %%dateuser%%

Иногда место на хостинге заканчивается, и тогда встает вопрос, как посмотреть кто виновник. Особенно это актуально, когда проектов много, и некоторые уже забыты, а место они занимают.

Я поступаю так:

По команде DU можно поискать в интернете, для себя сохранил именно эту. Ключи:

Так находятся файлы о которых или забыли, всякие архивы, дампы и многое другое.

На одном из сайтов потребовалось менять номер телефона если переход идет с Яндекс Директа, и есть ссылка с UTM параметром. Попробовал несколько скриптов, но остановился на этом, так как он не критичен к тому если один из селекторов не находит. Поэтому можно прописать кучу селекторов, которые есть на сайте. И он будет работать. Вставляя его в сниппет:

Решение взял с этого сайта https://brandmaker.ru/base/change-data

Понадобилось на одном проекте сделать галерею с превьюшками.

Так как это были кастомные записи, и их было много то, решил эту галерею вывести с помощью кастомных полей ACF и слайдера на основе Slick.

Для этого создал дополнительное поле для записи как Редактор WordPress

В поле добавлял обычную галерею которая есть в редакторе WordPress, а выводил её в шаблоне вывода записи, с помощью PHP-кода или через Oxygen, причем в двух местах, одна за другой (дубль). Только первому присваивал дополнительный стиль: slider-for-jq, а второму: slider-nav-jq.

И через сниппет подключил модуль Slick и прописал стили.

Вот код сниппета с готовым кодом:

И еще один момент, для того чтобы по клику на изображение открывалось большое изображение в модальном окне - установил плагин Easy FancyBox. А для навигационных слайдов отключил автоматическое определение ссылок как фансибокс, для этого добавил стиль .slider-nav-jq .gallery-icon a в исключения:

Необходимо было сделать, чтобы модальное окно открывалось на смартфоне во всю ширину экрана. Поэтому пользователи чтобы закрыть его использовали кнопку НАЗАД, на своем смартфоне. Но это приводило к переходу на одну страницу назад.

Шаблон сверстан в Oxygen, такой функции по умолчанию нет, поэтому прописал в сниппете следующий код:

Этот код делает следующие действия, когда нажимаю на кнопку, чтобы открыть модальное окошко, добавляется новое состояние истории в виде нового хэша в урл. Затем событие popstate закрывает открытое модальное окно.

Пример взят тут, за что им очень благодарен.

Необходимо было сделать чтобы переключалки слайдера были внизу и показывалось количество слайдов и номер слайда.

Для этого добавляем вот такой код в сниппет, и всё работает.

Столкнулся с такой проблемой, что созданные атрибуты в Woocommerce не выводятся в карточке товаров которая сверстана в Oxygen. Вернее если применен стандартный вывод информации товара. Так же атрибуты не выводятся в модальном окне через плагин yith-woocommerce-quick-view.

Решение нашел такое:

С помощью хуков вывел атрибуты и в большой карточке товаров и в модальном окне. Так же можно выводить в мини-карточках на странице архивов.

Чтобы посмотреть порядок вывода для модального окна YITH, можно заглянуть в файл:

/wp-content/plugins/yith-woocommerce-quick-view/includes/class.yith-wcqv-frontend.php

Сам код я взял на сайте https://wpcraft.top/woocommerce-kak-vyvesti-atributy-tovarov-v-kataloge/ Там есть еще пару вариантов, я их не проверял. Но размещу тут, вдруг пригодятся.

И вывод не всех атрибутов, а только первых двух:

На одном проекте было необходимо по ссылке сохранять переменные в файл CSV. Реализовал это средствами PHP, через сниппеты в WordPress.

Для этого завел сниппет, как шорткод. Сам шорткод [save_csv] вставил на страницу, на которую ссылается форма с перемеными передаваемые GET запросом.

URL имеет вот такой вид:

Код самого сниппета вот:

Файл сохраняется по адресу /wp-content/uploads/base.csv и имеет правильную кодировку cp1251, для открытия его через Excel без лишних манипуляций.

Чтобы разрешить хеш-ссылки (hash links) для открытия вкладок (tabs) в Oxygen нужно проделать следующее. Так как по умолчанию это не работает.

Нужно для таба прописать JS код, это делается так:

Решение взято тут: https://gist.github.com/wplit/0cc261359e17e7cb9140fb56b2412e47#file-tab-element-js

Чтобы на сайте сделать современный, красивый скроллбар (он же scrollbar) необходимо минимум кода CSS. Меняя цвета на своё усмотрение можно на своем сайте показывать красивый скролл.

И не нужно его прятать и избегать, так как он вписывается в общий дизайн сайта.

Код CSS для стилизации srollbar

На одном из проектов стояла задача разместить камеры наблюдения на сайте. Чтобы посетители могли наблюдать за объектом. Камеры были подключены и выданы ссылки с протоколом RTSP, с помощью VLC плеера можно было к ним подключится. Но чтобы их разместить на сайте — нужен сервер который поток RTSP преобразует в другой формат и который можно транслировать на сайте.

После поисков, было найдено простое и рабочее решение, благодаря программисту, который написал программу для сервера. Вот ссылка на описание этой программы.

Для вставки IP-камер на сайт мы сделали следующее

И за объектом стало возможно наблюдать прямо на сайте.

Код программы на Гитхабе: https://github.com/carpediem-av/rtsp2hls

Столкнулся с такой задачей. Для пункта в Max Mega Menu нужно было повесить своё событие через JQuery. Но оно не хотело работать. Причина оказалось в том, что maxmegamenu.js выводится в самом конце страницы. Поэтому чтобы запустить свое событие, его нужно инициализировать после запуска всех скриптов. Я поступил так:

Данный код по клику открывает меню 3-его уровня если он есть. Для этого необходимо еще прописать стиль:

Сегодня, в мае 2022 года я для себя открыл супер инструмент. Ранее которого мне не хватало. А именно как изменить цвет SVG иконке не вставляя её как код? А вот как.

Вставляем картинку СВГ (чёрно-белую иконку) как обычную картинку через тег IMG SRC

И присваиваем ей стиль через CSS:

Получится из черного цвета, зеленый цвет. Вот этот код

invert(42%) sepia(66%) saturate(1328%) hue-rotate(93deg) brightness(100%) contrast(103%);

генерируется в этом сервисе. Указываем там какой нам нужен цвет в формате #00bb12 и получаем код фильтра.

Как-то на одном проекте возникла необходимость стилизовать тег <select> и его пункты. Как известно с помощью простого CSS он не стилизуется так, как бы этого хотелось. В сети нашел решение. Решение реализовано на CSS и jQuery, взял его на этом сайте. Здесь выложу уже рабочий код, который применил для своих нужд, для плагина Contact Form, отличается он немного скриптом, так как я реализовал, чтобы в описание поля попадало первое значение из выпадающего списка. Так как само поле с выпадающим списком формируется через плагин Contact Form7 и его нельзя поправить.

1. В Contact Form7 я создал поле с выпадающим списком.

2. В сниппете прописал следующий код:

3. И прописал стили для этого селекта,

Получилось очень симпатично, а главное просто.

Открыл для себя плагин WP Grid Builder. Попробовал его в Oxygen применить для EasyPosts и Repeater element, результат огонь. Можно выводить список записей в Oxygen, через EasyPosts или Repeater, или Woocomerce и применять к нему Facet (фильтр).

Для этого я использую такие настройки:

А также установил плагин-дополнение WP Grid Builder - Oxygen для удобства, чтобы не вставлять фильтры через шорткод, а добавлять их через соответствующие элементы.

Там задается фильтр который создается отдельно и для какого блока записей он применяется.

В настройках EasyPosts появляется соответствующее меню. Где можно указать сообщение о том, если результаты не найдены (No Results Message) и добавить анимацию, при фильтрации записей.

Но эта анимация представляет из себя плавное появление записей, поэтому я нашел решение которое эту анимацию кастомизирует и добавляет плавную прокрутку в начало записей при выборе фильтра.

Анимация записей при фильтрации записей через WP Grid Builder в Oxygen

В редакторе Oxygen нужно добавить блок Code Block, и добавить в него Javascript код:

Код следующий, пробовал его добавить через сниппет, не заработал, работает только через Code Block:

А затем нужно добавит CSS в любом удобном месте. Я добавляю через сниппеты следующий код CSS:

Данное решение я взял с этого сайта, но выбрал для себя CSS с простой анимацией, так как при применении более сложной анимации, у меня зависал редактор. Можно написать и свой CSS для фильтрации записей. Главное? что добавляется стиль при применении фильтра.

Если не нужна анимация каждой записи, то можно обойтись вообще просто CSS, так как при применении фильтра для блока с записями добавляется класс .wpgb-loading примерно на 1 секунду. Вот для этого класса можно прописать свой стиль появления блоков. Тем самым не будет надобности использовать Javascript, но тогда нужно будет что-то придумывать с плавной прокруткой до начала, а так это все реализовано в одном коде.

Проблемы: При активированном плагине Autoptimize данный скрипт не работает. Не помогло даже убирание всех галочек в настройках плагина оптимизации. Только его деактивация.

Довольно часто необходимо скачать сразу много файлов по списку. Есть несколько способов, первоначально я это делал через Download master, но потом я попробовал это сделать через консольную утилиту Wget. Мне очень понравилось, так как нечего лишнего, и список может быть довольно большой.

Для начала я подготавливаю список с URL. И сохраняю его в текстовый файл url.txt. На сайте https://eternallybored.org/misc/wget/ скачиваю для своей версии операционной системы утилиту wget. Распаковываю программу в папку на диске C:\wget\. Туда же ложу файл url.txt для удобства. Создаю папку downloads_file на диске C:. И через командную строку запускаю команду:

c:\wget\wget.exe -i c:\wget\url.txt --secure-protocol=auto -nc -c -P c:\downloads_file\

На экране появится ЛОГ операций. Дожидаемся окончания и проверяем в папке закачанные изображения или файлы.

Некоторые переменные программы WGET

Нашел плагин Advanced Product Fields (Product Addons) for WooCommerce но еще не пробовал. Думаю, это альтернатива подобному-платному плагину. Чтобы не забыть.

Для того, что бы вывести Re-usable part в любом месте на сайте через шорткод, нужно в сниппете, через Code Snippets добавить код:

Для этого в нужно в Code Snippets выбрать: Запускать только на публичной части сайта

Затем нужно в том месте, где необходимо вывести этот шаблон вставить шорткод:

Где 627 это ID шаблона Oxygen.

Только стили в шаблоне Oxygen нужно прописывать для стилей, а не для ID, так как таблица стилей для идентификаторов не будет подгружаться.

Информация взята с сайта: https://wpdevdesign.com/shortcode-for-displaying-oxygen-templates-and-reusable-parts/

Нужно было с помощью Repeater создать рандомный вывод статей через Oxygen. Это делается через advanced

Но нужно было вывести всего 5 постов и убрать пагинацию в конце постов. Это делается следующим методом. Заходим в настройки и добавляем параметры.

Параетры:

Взято решение с этого сайта: https://wpdevdesign.com/how-to-remove-pagination-for-repeater-queries-in-oxygen/

При установке плагина Плагин расчёта стоимости доставки СДЭК для WooCommerce от WooDev. И если стоит плагин редактирования полей оформления заказа, такой как Checkout Fields Manager for WooCommerce или от Saphali. То при оформлении заказа вылетает ошибка: «Невозможно создать заказ, так как город получатель не определён.»

Для устранения этой ошибки, нужно добавить скрытое поле в платежный адрес с ID billing_state_id. Это можно сделать следующим кодом.

Для добавления Google Tag Manager я использовал раньше на сайтах плагин Head, Footer and Post Injections. Так как нужно было разместить код сразу за тегом <body>. В WordPress версии 5.2 и выше появился хук для этого wp_body_open() . Но я использую билдер Oxygen и для него тоже есть решение, вот оно. Нужно в сниппетах прописать следующий код:

Теперь одним плагином меньше.

В этой статье я расскажу о том как я создал интернет-магазин по доставке еды. Сайт был настроен и запущен одним человеком. Дизайн рисовал дизайнер, синхронизацию сайта с программой кафе делал программист. Опустим расходы на дизайнера и программиста. Так как в большинстве случаев для маленького кафе достаточно настроить сайт, и чтобы заказы с него прилетали на почту или телефон оператора, а он бы уже в ручную забивал их в программе, как если бы он принимал заказ по телефону.

И так начнем.

Мне понадобилось почти 100 часов, wordpress, woocommerce и несколько платных плагинов. Стоимость готового сайта для клиента сложилась из моих потраченных часов, стоимости плагинов, и стоимость дизайнера и программиста. Но как я уже писал выше программиста и дизайнера не будем учитывать, так как не всем нужна та или иная функциональность.

Чем интересен этот кейс?

Тем что я создал новый интернет-магазин на основе старого. Т.е. если у вас уже есть готовый, наполненный магазин, то при минимум затрат и времени его можно доработать. Старый сайт по доставке пиццы был сделан в 2013 году тоже на основе woocommerce. Но для функциональности на нем было куча «костылей» прям в коде woocommerce, из-за которых не могли провести очередное обновления плагинов. Поэтому при переделке сайта, а точнее сказать создании. Правок напрямую в коде плагинов не производилось. Только хуки и дополнительные функции созданные через сниппеты.

Какие основные плагины я использовал?

Конечно же это woocommerce, и ряд разных плагинов для нужной функциональности. Некоторые конечно можно заменить, но я не заменил их по причине того, что они уже стояли и перенастраивать их заново заняло бы больше времени. Из бесплатных это:

И платные плагины:

Это плагины, которые нужны для самого интернет магазина. Также помимо этих, на сайте используются и другие. Которые необходимы для правильной работы сайта в целом.

И теперь кратко о плагинах и для чего они нужны.

Oxygen

Это бильдер, он заменяет тему в wordpress. В нем собраны все шаблоны. Эти шаблоны можно легко экспортировать и импортировать на другой сайт через стандартный Экспорт-Импорт WordPress.

Oxygen Elements for WooCommerce

Это дополнение для Oxygen, установка этого плагина добавляет блоки от woocommerce/

Extra Variation

Это плагин дополнений. В нем настраиваются дополнения или опции для товаров, при выборе которых в карточке товара добавляется стоимость дополнения к основной стоимости товара. В этом случае это были дополнения для блюд.

WP All Export Pro и WP All Import Pro

Это плагин экспорта и импорта любых записей, товаров, кастомных записей. С этими плагинами производится массовое редактирование описаний, цен товаров и многое другое. В ручную редактировать товары, когда их много, да еще у каждого есть вариации - очень затруднительно. А благодаря этим плагинам это происходить существенно быстрее.

Advanced Custom Fields

Это плагин для кастомных полей, с его помощью создаются дополнительные поля с необходимой информацией о товаре. Которую необходимо разместить в описании товара отдельным блоком.

Max Mega Menu

Это меню для сайта, использую его, потому что оно мне нравится. Можно использовать и другой. Но в этом можно настроить красивое мобильное меню. А главное при минимуме затрат. А так же у него есть функция экспорта-импорта. Что сокращает время настройки при переносе его на другой проект.

Code Snippets

Это плагин сниппетов, заменяет стандартный файл functions.php в теме. Можно создавать свои функции и через хуки менять woocommerce и всё это правится прям в админке. Без этого плагина работа с Oxygen очень затруднительна.

WooCommerce

Это собственно плагин самого интернет-магазина, о нем уж столько расписано, что нет смысла говорит какую функцию он выполняет.

Ajax add to cart for WooCommerce

Это плагин добавления товара в корзину с карточки товара без перезагрузки страницы.

Saphali Woocommerce Russian

Это плагин для редактирования полей при оформлении заказов. Вместо него можно использовать Checkout Manager for WooCommerce мне он даже нравится больше, но в данном проекте стоял уже Saphali.

Variation Swatches for WooCommerce

Это плагин который переключения вариаций превращает в кнопки вместо выпадашек.

YITH WooCommerce Quick View

Это плагин для быстрого просмотра товара через модальное окно, работает как через аякс. В каталоге с большим количеством товаров не грузит сильно страницу, так как не создает для каждого товара отдельную карточку, как некоторые плагины.

Оплата банковской картой (от Сбербанка)

Это плагин от сбербанка, платежный шлюз. Через который осуществляются он-лайн платежи на сайте.

Переделка сайт с минимальными затратами

Изначально планировалось, просто уйти от «костылей» в коде. Чтобы WP и все плагины работали как есть от разработчика, и обновление не затрагивало функциональности, а сайт работал без перебоев в работе. Для этого была сделана копия сайта, обновил WP и плагины, установили Oxygen, чтобы дизайн собирать в нем. Но когда клиент увидел скорость работы нового сайта, он захотел сразу вложить в него больше денег и переделать дизайн.

Для себя я выбрал такой подход, что все изменения я делал в шаблонах Oxygen и все новые функции прописывал в сниппетах. Чтобы потом, просто обновить старый сайт и через экспорт-импорт перенести шаблоны и сниппеты. Но от этого в последствии отказались, просто заменили местами сайты. Хотя из-за этого подхода я теперь могу для другого проекта перенести все свои наработки на другой сайт и потратить на него в пределах 10-20 часов рабочего времени и иметь готовый интернет-магазин доработанный, чтобы было удобно покупателям.

К таким удобствам относятся:

Конечно эти пункты обычные, но в стандартном woocommerce этого нет, приходится через хуки делать изменения. И сейчас у меня готовые наработки которые за 4 клика можно применить к другому сайту.

Готовый набор своих наработок я могу продать или установить сам на ваш сайт. Кому интересно, обращайтесь через форму обратной связи.

Что бы запустить сайт и начать с ним работать. Я делаю следующие шаги. У каждого эти шаги свои и разные. Но мне удобно так, поэтому я расскажу о своем опыте. Коротко о шагах которых я придерживаюсь, чтобы не упустить деталей.

  1. Домен.
  2. Хостинг.
  3. Установка WordPress на хостинге.
  4. Установка основных плагинов.
  5. Настройка WordPress.
  6. Создание основных шаблонов (шапка, футер).
  7. Создание основных страниц.
  8. Регистрация пользователей.
  9. Настройка безопасности.
  10. Настройка бэкапа.
  11. Настройка SEO.
  12. Регистрация и установка метрики.

Доменное имя

Регистрирую доменное имя. Если есть уже, то прошу доступы или прописать NS-сервера от хостинга на котором будет сайт.

Хостинг

Выбираю хостинг. Мой выбор сейчас остановился на ТаймВеб. Я его рекомендую всем клиентам, так как с ними работать удобно. И цена у них соответствует услугам.

Установка WordPress

На хостинг устанавливаю свежий архив https://ru.wordpress.org/download/#download-install Так как процесс установки полностью контролирую сам. Создаю базу с понятным именем. Меню прификс базы с стандартного WP_ на другой (для надежности). Создаю администратора с нестандартным именем. Захожу в админ панель и начинаю настраивать.

Основные плагины для работы с WordPress

Для удобной работы с CMS ставлю основные плагины. Все бесплатные плагины устанавливаю через админку, через поиск. Но если нужно запускать сразу много сайтов. То можно все эти плагины скачать в архив, и потом распаковывать это архив на хостинге, а в админке только активировать и обновлять если потребуется. Так существенно экономится время.

Дополнительно ставлю, если нужно будет:

Если требуется интернет магазин или каталог то ставлю:

Также я ставлю платные плагины, которые облегчают работу и без которых уже трудно представить работу на сайте и его обслуживание.

Настройка WordPress

Пробегаюсь по настройкам, устанавливаю

Если настраиваю интернет магазин, то захожу в настройки Woocommerce и настраиваю там первоначальные данные.

Основные шаблоны сайта

Так как в работе я использую Oxygen, то в нем создаю основные шаблоны.

Для чего? Так удобнее переносить потом дизайн через стандартный экспорт-импрот средствами самого WordPress. Если будет необходимо перенести на другой, уже рабочий и наполненный сайт.

Основные страницы сайта

Завожу основные страницы, которые будут в меню. Если на сайте будут новости или блог, то завожу 3-4 записи. Для интернета-магазина, добавляю несколько товаров. Это для того, чтобы сразу выстроить структуру сайта и добавить меню на сайт.

Регистрация пользователей

Создаю пользователей, для того чтобы разграничить доступ. Чтобы у меня всегда оставался свой пользователь, так как иногда когда сайт начинает работать, просят что-то поправить через год. А доступы все утеряны, даже от хостинга. А отдельная своя учетная запись иногда выручает, если её не удалили. Также это помогает разбираться, кто накосячил, для этого ставится плагин, который ведет историю по пользователям — кто и когда правил записи и страницы.

Последний шаг в запуске сайта

Далее настраиваю:

И начинаю тонкую и глубокую работу с сайтом по ТЗ, верстку по макету, доделки и пожелания клиента. Процесс этот долгий, для каждого сайта индивидуальный. Поэтому некоторые части этого процесса будут описаны отдельными записями.

Чтобы на странице оформления заказа убрать итоговую таблицу, это иногда надо, когда совмещается корзина и оформление заказа на одной странице. Нужно вставить следующий код.

(далее…)

На одном из проектов, необходимо было реализовать фотогалерею по разделам. Она была реализована с помощью кастомных записей и плагина Search & Filter. Но при переводе проекта на Oxygen, плагин Search & Filter отказался работать. Поэтому переделали фильтр на основе кастомных записей и библиотеки Isotope.

(далее…)

При оформлении заказа, часто нужно вставить свои поля, но по умолчанию они не попадают в шаблон письма. Есть решение, добавляем код, который добавит нужные нам поля в письмо.

Хочу рассказать, почему именно WordPress я выбираю для сайтов. Всё просто, это движок мне нравится больше остальных, я с ним работаю с 2010 года. За это время было много сайтов созданых другими инструментами, но WordPress по сравнению с ними на порядок выше, он гораздо удобнее.

В работе с командой я выполняю роль верстальщика. Задачи по программированию лежат на программисте. Но если я собираю сайт на WordPress-е, то большинство задач я выполняю сам, не прибегая к помощи программиста. Так простые сайты, одностраничники, Landing page и простые интернет-магазины я собираю сам от начала и до конца. Если же требуется реализовать не стандартную схему работы на сайте, то тут помагает программист.

Так работая над одним проектом в bitrix, мы постоянно были привязаны к программисту, из-за чего сроки поджимали. Делая сайт на вордпрессе, такого бы не было. Но и в конце с битриксом ждала проблема, при его интеграции с 1C (а именно из-за этого его выбрал клиент), настройки постояно «ломались», каждое обновление приносило головную боль. В итоге мы поняли, что если бы сразу начали собирать сайт на WordPress+Woocommerce, такого бы не произошло. Так как для интеграции 1C с Woocommerce есть готовые плагины.

А если собирать простые интернет-магазины на WordPress+Woocommerce, так это вообще сказка, за неделю удается начать с нуля и полностью отдать клиенту готовый и рабочий магазин. С корзиной, экварингом и массовым редактированием товаров через Excel, CSV или XML.

Поэтому цикл статей по cозданию сайтов я буду посвещать только WordPress и его плагинам. По нему в сети есть куча полезной информации, которая помогает создавать очень интересные проекты.

Те кто говорит, что WP это не лучший выбор для создания сайта, что он тормозной, что он тупит. Пускай остаются при своем мнении, я же на нем создал не мало сайтов и понимаю, что сибестоимость готового проекта на WordPress в разы обходится дешевле клиенту, чем разработка подобного проекта на других «движках».

Понадобилось на одном сайте, на WordPress сделать переключение городов и разный контент для каждого города. Реализовал просто, установил плагин WT GeoTargetinghttps://wordpress.org/plugins/wt-geotargeting/ В настройках прописал только город по умолчанию, в шапке сайта поставил шорткод:

Который выводил город, на этот блок повесил событие по клику, которое выводило модальное окно с выбором городов, в нем просто поставил ссылки:

А в том месте где нужен разный контент для разных городов, вставил шорткоды:

Описание шорткодов можно смотреть на сайте разработчиков плагина: https://web-technology.biz/cms-wordpress/plugin-wt-geotargeting-for-cms-wordpress/shortkod-wt_geotargeting/

Для товаров без указанной цены выводим сообщение «Цена по запросу»

Для товаров с нулевой ценой выводим «Цена по запросу» вместо «Бесплатно»

И отключаем возможность покупки товара с нулевой ценой

Взято тут: https://conotes.ru/sajtostroj/wordpress/woocommerce/woocommerce-tsena-po-zaprosu.html

Столкнулся с такой проблемой. Woocommerce не сортирует товары у которого стоит статус "в наличии" или "нет в наличии". Он только сортирует по остаткам на складе. Поэтому вышел из положения так. На странице вывел все товары и те у кого статус "нет в наличии" скриптом перекинул вниз.

Если заменить на $this.prependTo($this.parent()); то все товары не в наличии попадут наверх.

Прилепающие сообщения в Oxygen

Этот же скрипт помог в случае когда нужно было "прилипающие" сообщения вывести наверх списка. Для этого в шаблоне вывода постов Oxygen я добавил в класс следующий код

А в сниппете подключил скрипт, который посты с классом sticky перекидывает наверх:

Записываем в functions.php следующий код

Если не сработает, то, скорее всего, в теме есть файл шаблонов комментариев — comments.php. Тогда нужно в нем править. Закомментировать это поле с name="url".

Иногда нужно создать копию сайта, и когда размер папки с сайтом занимает большой объем, то возникают трудности с работой по ФТП через панель управления хостингом — не всё копируется. А работать через ФТП-клиент тоже не удобно, так как большой объем файлов.

Поэтому гораздо проще и быстрее это сделать через SSH-консоль командой рекурсивного копирования всего содержимого папки:

cp -r * /home/r/папка_назначения/public_html/

Эта команда скопирует содержимое папки в которой мы находимся в папку /home/r/папка_назначения/public_html/

Восстановить базу данных из дампа можно несколькими способами, это и через панель хостинга, и через MyPhpAdmin. Но иногда импорт через MyPhpAdmin завершается ошибкой, особенно когда база большого объема. Поэтому гораздо проще и быстрее развернуть дамп базы через консоль SSH.

Это можно сделать с помощью следующей команды:

mysql -h имя_хоста_DB -u имя_пользователя_DB -pпароль_DB имя_DB < путь_к_файлу_дампа_базы

Внимание: между параметром «-p» и паролем к базе данных не должно быть пробела.

Пример:

mysql -h localhost -u user -pBzzZw nameDB < dump-DB-full-05.03.2020.sql

Если дамп запакован в архив, перед разворачиванием его нужно разархивировать, это также можно сделать одной командой:

zcat dump-DB-full-05.03.2020.gz | mysql -h localhost -u user -pBzzZw nameDB

Создание дампа базы данных для переноса сайта

Иногда создать дамп через панель управления хостингом не получается, тогда его можно создать через SSH консоль.

Для этого выбираем директорию с требуемым сайтом и вводим в командную строку следующее:

mysqldump -ulogin -p dbname >dump_file.sql

login - логин для доступа к базе данных,
dbname - имя базы данных
dump_file.sql - имя создаваемого файла дампа)

Нажимаем Enter, система запросит пароль для доступа к базе данных. Если введённые данные верны, то начнётся создание дампа. По его окончании увидим строку для ввода команд. Дамп готов. Файл дампа будет расположен в текущей директории, имя файла dump_file.sql.

Ultimate Member — плагин для создания сообществ и пользовательских профилей в WordPress. https://ultimatemember.com/ и https://wordpress.org/plugins/ultimate-member/. Альтернатива: плагин WP-Recall https://wordpress.org/plugins/wp-recall/ (Ultimate Member проще и понятнее)

Search & Filter — плагин для организации своего поиска на сайте и фильтра рубрик и кастомных записей. https://ru.wordpress.org/plugins/search-filter/

WPC Variations Radio Buttons for WooCommerce — плагин для удобного выбора вариативных товаров. https://ru.wordpress.org/plugins/wpc-variations-radio-buttons/

Чтобы изменить URL адрес WordPress, Вы должны прописать этот код в файл wp-config.php:

В файле functions.php прописываем следующий код:

При работе с плагином Woocommerce на сайте часто требуется изменять вид отображения карточек товара, корзины и многое другое.

Для этих целей можно править шаблоны, применять плагины и использовать хуки. В этом посте я буду собирать полезные хуки для вукомерц.

Хуки (hooks)

(далее…)

На сайте часто нужно вывести информацию в шапке о режиме работы или контактах. Чтобы не нагромождать информацию, её можно разместить во всплавающем окне, которое выводится по клику на какой нибудь элемент.

Простое всплывающее окошко можно сделать с помощью CSS и  jQuery.

Для это добавляем код html на сайт:

Скрипт вставляем в шапку или футер:

И прописываем стиль для появления этого окошка.

Источник кода взят тут: http://jsfiddle.net/iiil/7Ly6y/3/

Если с сайта нужно выгрузить фид для Яндекса или для другого сервиса. То есть два способа. Первый это всевозможные плагины, но они почти все работаю с Woocommerce. Второй вариант, написать выгрузку вручную.

С такой проблемой я столкнулся на сайте застройщика, квартиры были выполнены кастомными записями. А нужно было несколько фидов в XML-формате для разных сервисов. И вот как я поступил, покажу на примере одного фида. Я же по подобию делал их несколько.

В файл functions.php вставляю следующий код:

Описание: yandex-realty.xml это адрес фида https://название_сайта/yandex-realty.xml/ и rss-realty — это название шаблона который нужно положить в папку с темой сайта (rss-realty.php).

В файле rss-realty.php вставляем цикл WP_Query который берет из кастомных записей, кастомные поля. Для примера приведу готовый код Яндекс.Недвижимость.

 

 

Для WordPress плагин Elementor выполняет большинство задач не прибегая к ковырянию в коде. Но всё же есть моменты, которые Elementor не выполняет без Хуков.

Так  виджет AE Post Blocks от плагина AnyWhere Elementor Pro выводит записи именно те которые прописываются в фильтре

И если этот виджет применить для шаблона архива в Elementor, то при переходе по таксономиям (рубрики, теги) записи не фильтруются. Чтобы это исправить есть один хук.

В виджете, в поле Query Filter прописываем название пользовательского фильтра: my_super_filter (можно название любое).

В файл funtions.php для активной темы прописываем следующий код:

И после этого записи фильтруются по рубрикам. Так же можно и фильтровать по тегам. Этот же хук можно применить для виджета — Записи, который входит в плагин Elementor Pro. Для этого во вкладке Запрос, есть поле  ID запроса.

О работе этого хука я узнал из документации к AnyWhere Elementor Pro.

Чтобы блок с меню (или шапка сайта целиком) при прокрутке страницы вниз — скрывался, а потом прилипал сверху сайта, нужно присвоив  блоку стиль и задать ему свойство position: fixed;.

И прописать, код который при прокрутке на несколько пикселей вниз (в нашем случае на 135px) будет блоку со стилем .menu присваивать стиль .fixed.

Так можно создавать дополнительный блок со свойством  displaynoneа при достижении прокрутки до определенного расстояния появляться. Таким образом можно создать разные шапки, основную и дополнительную (минимальную), которая будет прилипать при скролле сайта вниз.

Прилипающее меню для мобильный устройств, которое показывается только при прокрутке вверх

В Oxygen есть настройка для хедера, чтобы он показывался при прокрутке вниз. Но у него нет функции, чтобы на мобильных устройствах при прокрутке вниз он не показывался, а когда мы листаем вверх, то он появлялся. Для это я в настройках хедера в редакторе Oxy выставляю для него skicky всегда, и добавляю в сниппет код JS и CSS. Где при прокрутке вниз добавляется стиль, который скрывается, а при прокрутке вверх он удаляется, соответственно header появляется.

Если необходимо на сайте в div подгрузить какой нибудь html контент, это можно сделать следующим образом. Положить html файл на сервер, через FTP-клиент. И прописать скрипт.

Когда нужно сделать простой слайдер фотографий или слайдер текста. То можно применить bxslider.

При вставке стандартной галереи в Wordpres на страницу, из этих картинок можно сделать слайдер, если подключить bxslider. Подключается он очень просто. Достаточно прописать код в шапке или футере сайта. (далее…)

Часто требуется выводить блоки, чтобы они были одинаковой высоты и сами подстраивались под содержимое. Для этого вставляем следующий код

Код HTML

Код скрипта

Тэги могут быть разными, вместо списков li могут, могут быть div.

envelope