Я использую тему, которая не очень хорошо дружит с Gutenberg. При этом мне нужно делать на нем лендинги и хотелось делать их быстро и хорошо. Решил поиска решения.
Сниппеты
Простые участки кода, для частого использования и вставки в код сайтов.
module & nomodule — загрузка JavaScript для современных браузеров и поддержка старых
Рассмотрим паттерн module/nomodule, который позволяет разделить загрузку скриптов для старых и новых браузеров.
async & defer в WordPress — ускоряем загрузку JavaScript
async & defer — это очень полезные механики, которые позволяют существенно ускорить загрузку страниц и их отрисовку для посетителей. Однако они относительно новые в мире JavaScript. И потому в мире WordPress еще существует много скриптов которые не используют их. Но это легко решается через wp_script_add_data.
robots.txt для WordPress — рабочий пример файла
Провел SEO-аудит сайта при помощи labrika.ru. Оказалось что много технических ошибок. Пришлось колдовать с файлом robots txt. Готового плагина для этих целей у меня нет. Потому пришлось решать вопрос программно.
Протокол REST API JSON в WordPress
Чуть более года назад в WordPress появился родной REST JSON API, разработанный с учетом лучших практик обмена данными и создания AJAX запросов. В основном это нужно для AJAX и ускорения работы сайта, но еще это круто работает для интеграций и обмена данными с другими системами. Кривые AJAX-запросы Большинство программистов в WordPress превратно понимают суть и…
Автоматический сброс кеша на стили (CSS), скрипты и картинки
Частая проблема в разработке это сброс кеша после изменение стилей, скриптов, картинок. Вы изменили что-то, у вас на компьютере это выглядит по новому, а кто-то другой заходит, а у него старые версии файлов, все новшества ломаются. Начинаются удивления, шок, паника 🙂 Существует множество подходов к решению этих проблем в WordPress. Вчера наткнулся на один достаточно […]
Журналы (Logs) данных и ошибок в WooCommerce
Начиная с версии 2.7 в WooCommerce внедрили новый метод логирования данных и ошибок. Это удобно для отслеживания процессов в системе и диагностики проблем. Использование Идем в консоль сайта, далее раздел WooCommerce / Статус. Далее вкладка Журналы (Log). Выбираем нужный журнал. Например если это какой-то плагин, то обычно журнал будет начинаться с названия этого плагина. Либо […]
Отключаем сообщение «JQMIGRATE: Migrate is installed, version 1.4.1»
В WordPress по умолчанию активирован плагин jQuery.Migrate. Это нужно для совместимости со старыми компонентами. Но в 80% случаев в нем нет смысла. Зато он пишет в консоль свое сообщение и доставляет страдания внутреннему перфекционисту. Лечится это простым сниппетом, который можно добавить в functions.php нашей темы:
Смена структуры URL на сайте без потери трафика из поиска (SEO)
Попался сайт, на котором были ужасные URL с русскими символами что негативно сказывалось как на удобстве использования сайта, так и на SEO. Исходная ситуация Сайт типа Интернет-магазин запчастей на базе WordPress & WooCommerce Все ссылки без конвертации в латиницу Ужасно смотрится когда просто передаешь ссылку по почте или через сообщения Плохо влияет на SEO Задача […]
Отладка кода через бэктрейс — debug_backtrace()
Возникла ситуация, при которой метод get_term вызывался 20 000 раз. Причем даже на чистой установке WP. Базовая причина была ясна — у нас было 60 постов на странице и у каждого поста около 1000 категорий. Что конечно не очень правильно, но имели то что имели. Как выяснить почему get_term() вызывается 20 000 раз? Просто поиском […]
3 подхода к программированию классов в WordPress
В WordPress можно встретить множество стилей программирования. Это огромный мир, который вмещает в себя разные стили и подходы. Но если изучать ядро и качественные плагины, то можно обнаружить 3 базовых подхода к программированию классов. Классический класс 🙂 Это наиболее частый и понятный метод. Используется метод __construct() для создания экземпляра класса. Но он же наиболее проблемный из-за […]
Вывод типа поста Продукт в топ поиска на Сайте
Возникла задача выводить вверх поиска продукты из WooCommerce. Чтобы они были выше чем посты в блоге. Проблема — часто заходишь на сайт, чтобы найти какой-то продукт в каталоге. Но поиск постоянно сверху выдавал посты из блога с похожими словами. А хочется чтобы Продукты были сверху. Нашел такое решение:
Сниппет для быстрой настройки заданий по расписанию — wp_cron
При решении задач автоматизации процессов на сайте часто бывает нужно настроить wp_cron. До сих пор каждый раз вставлял функции wp_cron внутрь соответствующих классов. Но надоело 🙂 Думаю это лучше делать как подключаемый класс в форме сниппета. Скопировал, сделал класс типа class-cron.php, поменял префикс My на свой, где нужно чуть чуть поменял параметры и вперед.
Как изменить ссылку логотипа на странице входа WordPress? (wp login)
Иногда бывает нужно изменить ссылку у логотипа на странице входа WordPress. По умолчанию она ведет на официальный сайт WordPress. Эту задачу можно решить плагинами стилизации или кодом (программно). Плагины раз два Без плагина Можно добавить в файл дочерней темы functions.php
Автоматическая генерация логина пользователя при регистрации
Иногда нужно сделать регистрацию на сайте только по email. Без указания логина. Для этого пригодится сниппет функции которая возвращает логин на основе последнего id в базе пользователей.
Создание эндпоинта и хак сброса пермалинков
В последнее время все чаще сталкиваюсь с задачами где нужно применять ендпоинты в WordPress. Например через ендпоинты собран раздел личного кабинета WooCommerce (My Account). Все подразделы личного кабинета — это ендпоинты. Хотя выглядит как подстраницы. Также часто нужны корневые эндпоинты например для AJAX и каких-то frontend-обработок. Либо для построения тех же личных кабинетов, когда создание […]
Как разрешить загрузку zip файлов?
Бывает нужно разрешить загрузку zip файлов или других расширений. Для этого в WP есть хук-фильтр upload_mimes Код можно вставить в файл functions.php темы или в плагин.
Как добавить CSS классы ко всем пунктам меню?
Меню в WordPress делается через функцию wp_nav_menu(). Иногда нужно не трогая чужой код, изменить набор классов используя свою механику. Для этого можно использовать хук nav_menu_css_class, мы можем добавить свои CSS классы, если соблюдается нужное нам условие. Добавим CSS класс, если это пост и название элемента меню равно «blog»:
Универсальные методы подключения файлов компонентов для тем и плагинов
В мире WP есть различные методы для получения путей к файлам без хардкода. Это важно, тк папки зависят от опций и могут меняться. Если путь к какому-либо файлу «захардкожен» — мы можем получить разные неожиданные ошибки. А далее каждый раз встает вопрос, каким методом можно получить путь до файла? Скажем это js, css или какая-то картинка… […]
Как получить путь до файла в ядре WordPress?
Бывает нужно получить прямой доступ к файлам ядра WordPress. Для этих целей есть метод get_home_path() Но он часто вызывает ошибку: PHP Fatal error: Call to undefined function get_home_path() Решением может быть такой метод: $path = wp_normalize_path(ABSPATH . ‘/wp-blog-header.php’) Таким методом мы получаем всегда верный путь до файлов ядра. Даже с учетом типичных проблем: установки WordPress в […]
Получаем и обрабатываем данные в формате JSON
Часто при интеграции сайтов на WordPress, нужно получать данные из других систем посредством RESTfull интерфейса в формате JSON. Простейший пример — получить курс валют от https://openexchangerates.org/ При регистрации дается URL, который возвращает данные о текущем курсе валют. Соответственно если нам нужно обработать эти данные к примеру для конвертации валют в магазине, то нам нужно как […]
Сниппеты для загрузки файлов из фронта WordPress + секретная естественная функция
ссылка https://premium.wpmudev.org/blog/upload-file-functions/ очень полезная статья (повтор ссылки)
Добавить скрипт/стиль в плагин/тему WordPress
Просто добавление скриптов или стилей в шапку или подвал сайта — это плохо. Могут быть конфликты с другими компонентами где есть аналогичные скрипты. Важно добавлять их через очередь, которая контролирует добавление скриптов на страниц и исключает конфликты. https://gist.github.com/uptimizt/7b128f6678a32ade9063
Как вывести рекламу после определенного абзаца в посте или на странице
Размещение рекламы в самом эффективном месте поста или страницы является нетривиальной задачей. Как показывает практика, самая эффективная реклама, которую замечают, по которой кликают — реклама, размещенная внутри контента. Расположить ее внутри поста можно, воспользовавшись шорткодом, однако этот ручной метод требует постоянного контроля — нужно, как минимум, вставить шорткод в содержимое поста или страницы. Для того, […]
Контрастный шрифт с тенями для пестрого фона
Часто бывает нужно разместить текст на фоне пестрой картинки. При этом читаемость текста может сильно ухудшиться. Для этого пригодится CSS-стиль который делает контраст цвета и добавляет тень. Для темного фона: Для светлого фона: Конкретные цвета можно и иногда нужно менять под цвет фона.
Как изменить заголовок (title) страницы в WordPress 4.4?
При обновлении WordPress до 4.4. сломался механизм изменения заголовков. Оказалось что в новой версии логика изменения title изменилась. Пришлось переписать плагин: https://github.com/systemo-biz/add-id-in-title-wp/blob/master/add-id-in-title.php Пример нового сниппета для измения заголовока: [code] // Для новой версии WP 4.4.+ function document_title_parts_cb_s($title){ if(is_single() and $id = get_queried_object_id()){ $title[] = ‘#’ . $id; } return $title; } add_filter( ‘document_title_parts’, ‘document_title_parts_cb_s’ ); [/code]
Очищаем номер телефона от лишних символов с помощью PHP
Возникла задача прочистить номера телефонов, которые были во многом забиты со словами и буквами. Так чтобы остались только числа. Нашел такой вариант решения: $str = ‘телефон 8 (9123) 123123’; $int = filter_var($str, FILTER_SANITIZE_NUMBER_INT);
CSS Media Query — для больших экранов
предположим нам нужен крупный шрифт заголовка у секции, но только для крупных экранов: Или нужно написать стили только для экранов шириной от 1000 пикселей и особый фон секции, то используем такую конструкцию:
301 редирект в htaccess для изменения домена сайта с переносом трафика и показателей
Options +FollowSymLinks RewriteEngine on RewriteCond %{REQUEST_FILENAME} robots.txt$ [NC] RewriteRule ^([^/]+) $1 [L] RewriteCond %{HTTP_HOST} ^site\.com RewriteRule ^(.*)$ http://site.org/$1 [R=301,L] RewriteCond %{HTTP_HOST} ^www.site\.com RewriteRule ^(.*)$ http://site.org/$1 [R=301,L]
Используйте get_post() вместо global $post
Часто разработчики WordPress используют объявление глобальной переменной $post для доступа к данным текущего поста. Но разработчики ядра уже давно отказались от этой идеи и почти везде заменили ее на $post = get_post();
Поиск, обработка и замена текста между тегами на PHP
Сегодня возникла задача обработки уведомлений по шаблону с ключевыми словами. К примеру «Здравствуйте [[name]]!». Где name нужно заменить на имя пользователя в письме. Нашел статью… Сегодня я постараюсь объяснить как найти, обработать и заменить текст между тегами используя PHP функции. На первый взгляд простая задача, тем более в PHP есть специально предназначенные для этого функции, […]
Скрытый журнал ошибок в WordPress (WP_DEBUG)
Бывает нужно включить логи WordPress, чтобы понять что происходит с сайтом. Определить проблемы и причины ошибок. Для этого есть переменная WP_DEBUG в файле wp-config.php. Беда в том что если просто ее включить, то ошибки полезут на экран и это создаст проблему в работе сайта. Зачастую нужно включить журна ошибок, но при этом оставить сайт в рабочем […]
При обрезании текста выводятся кракозябры и знак вопроса
Часто встречается проблема при которой на сайте выводятся знаки вопроса или разные символы кракозяб при обрезании текста. Это происходит при использовании функции substr. Причина в том что эта функция нормально работает только с латиницей на англоязычных сайтах. Русский язык более требовательный и работает как правило в кодировке UTF-8. Для того чтобы решить эту проблему, нужно […]