Рекомендуется добавлять квадратное изображение разрешением 512 на 512 пикселей, так как его нарезка будет использоваться на разных устройствах.
Значок сайта который Вы видите во вкладках браузера, строке закладок, и внутри мобильных приложений WordPress. Он должен быть квадратной формы с разрешением не менее 512 × 512 пикселей.
официальная рекомендация из панели управления WordPress
Данная команда скопирует всё содержимое директории /var/www/site/ удалённой машины в домашнюю директорию пользователя /newsite/public_html текущей машины (с которой осуществлялось подключение).
Данный пример рассматривает подключение по нестандартному ssh порту 22888 (по умолчанию 22-ой).
Опции:
—archive (можно сокращённо -a) команда для удобства объединяет в себе ряд других команда (равносильно -rlptgoD). То есть, утилита пройдёт рекурсивно по всем вложенным каталогам, перенесёт символические ссылки как символические ссылки ( -l ), сохранит изначальные права доступа к файлам ( -p ), сохранит время модификации ( -t ) и т.д.
—verbose вывод подробной информации о процессе синхронизации.
—progress показывать строку прогресса для синхронизации.
-e указывает удаленную оболочку для подключения (использования)
Рекомендация
При неуверенности запускайте в пробном режиме, при котором ничего не произойдёт, а только утилита продемонстрирует в консоли свою работу, но файлы скопированы не будут. Для этого нужно добавить опцию —dry-run
В таком случае наша консольная команда может выглядеть вот так:
Это закрывающие слэши. Закрывающий слэш означает «внутреннее содержимое». То есть, если в случае /var/www/site/ убрать закрывающий слэш /var/www/site то в итоге будет создана эта директория и мы получим немного неожиданный результат. Наши копируемые файлы окажутся вот тут /newsite/public_html/site
При этом, наличие или отсутствие закрывающего слэша в имени директории, в которую будет происходить копирование, значения не имеет. Важно обращать внимание на слэш источника.
Это символы двоеточия при подключении к удалённым машинам.
Подробнее о заголовке Last-Modified можно почитать тут. Пожалуй, для SEO добавлю описание:
HTTP заголовок Last-Modified сообщает клиенту (браузеру, поисковому боту) время последнего изменения страницы (объекта). Если клиент получил заголовок Last-Modified, то при следующем обращении к адресу, при условии, что страница (объект) есть в локальном кэше, он добавит заголовок-вопрос If-Modified-Since (не изменилась ли страница после даты, полученной в Last-Modified).
В свою очередь сервер, получив запрос If-Modified-Since должен сверить полученную временную метку с временем последнего изменения страницы и, если страница не изменялась ответить 304 Not Modified.
Как добавить HTTP заголовок Last-Modified на PHP в WordPress?
В целом на официальном сайте уже существует реализация на PHP, которую остаётся немного адаптировать для WP.
Отправка Last-Modified и обработка HTTP_IF_MODIFIED_SINCE на PHP
// время последнего изменения страницы в формате unix time
$lastModified = strtotime('2022-06-18 19:01:58');
// дата последней загрузки, отправляемая клиентом
$ifModified = strtotime(substr($_SERVER['HTTP_IF_MODIFIED_SINCE'] ?? '', 5));
if ($ifModified && $ifModified >= $lastModified) {
// страница не изменилась, отдача http статуса 304
header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
exit;
}
header('Last-Modified: ' . gmdate("D, d M Y H:i:s \G\M\T", $lastModified));
// дальнейшая загрузка страницы
Получаем время последнего изменения страницы, проверяем наличие If-Modified-Since, если есть — отдаем 304 Not Modified и останавливаем работу скрипта, иначе генерируем заголовок Last-Modified и отдаем страницу.
Версия для WordPress
Этот готовый код необходимо добавить в functions.php или через плагин. Я рекомендую добавлять этим методом.
/**
* Last-Modified and If-Modified-Since Headers
*/
add_action('wp', poet_'last_if_modified_headers' );
function poet_last_if_modified_headers() {
global $post;
if(isset($post)){
$LastModified_unix = strtotime($post->post_modified);
$LastModified = gmdate("D, d M Y H:i:s \G\M\T", $LastModified_unix);
$IfModifiedSince = false;
if (isset($_ENV['HTTP_IF_MODIFIED_SINCE'])) {
$IfModifiedSince = strtotime(substr($_ENV['HTTP_IF_MODIFIED_SINCE'], 5));
}
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
$IfModifiedSince = strtotime(substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 5));
}
if ($IfModifiedSince && $IfModifiedSince >= $LastModified_unix) {
header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
exit;
}
header('Last-Modified: '. $LastModified);
}
}
Настройки HTTP-сервера Nginx
Если вы используете в качестве веб-сервера Nginx , то есть вероятность столкнуться с проблемой отдачи заголовка. Всё дело в том, если у вашей конфигурации включена директива ssi
Модуль ngx_http_ssi_module — это фильтр, обрабатывающий команды SSI (Server Side Includes) в проходящих через него ответах.
Пример конфигурации при котором разрешается обработка команд SSI в ответах:
location / {
ssi on;
...
}
Следовательно, прицепом к этой директиве необходимо включить еще одну, которая по умолчанию выключена:
location / {
ssi on;
ssi_last_modified on;
}
Позволяет сохранить поле заголовка “Last-Modified” исходного ответа во время обработки SSI для лучшего кэширования ответов.
По умолчанию поле заголовка удаляется, так как содержимое ответа изменяется во время обработки и может содержать динамически созданные элементы или части, которые изменились независимо от исходного ответа.
Самый простой плагин для оптимизации скорости WordPress, который позволяет ускорить работу сайта в несколько кликов, встречайте! Бесплатный плагин — Jetpack Boost.
После установки плагина и его активации в меню появится специальный раздел. Нас интересует ссылка Boost
Чтобы начать использовать функции плагина необходимо выбрать тарифный план. Его бесплатной версии более чем достаточно.
После этого в принципе можно в несколько кликов настроить наш плагин на работу по ускорению нашего сайта. В верхней части страницы настроек вы должны увидеть шкалу оценки производительности. Классно будет, если они у вас сразу будут в зеленой зоне 🙂
Ну а если нет, то давайте улучшим эти показатели.
Оптимизация загрузки CSS
Первая настройка Оптимизация загрузки CSS создаёт критически важные CSS вашей главной страницы, публикаций и других страниц. Это позволяет значительно ускорить отображение контента на экране, в особенности на мобильных устройствах.Подробнее о создании критически важных CSS см. на web.dev
По умолчанию эта настройка включена. Единственное нужно дождаться ее завершения и не покидать страницу.
Кеш страниц
Кеш страниц ускоряет работу сайта, сохраняя страницы в виде статических файлов. Такие файлы быстрее доставляются посетителям, что снижает время загрузки и делает удобнее работу с сайтом.
Включив данную функцию вы значительно снимете нагрузку с вашего сайта, особенно если его одновременно посещает большое количество посетителей.
Обратите внимание, что дополнительно вы можете исключить страницы из кеша. Это справедливо для таких типов страниц, как, например, корзина или страница оформления заказа, где как вы понимаете, кеш абсолютно неуместен.
P.S. Рекомендую включить журнал и проверить работу кеширования. Если проблем на сервере нет, то при включенном страничном кешировании вы должны видеть попадание в кеш посещенных страниц.
Отложенное выполнение второстепенного кода Javascript
Отложенное выполнение второстепенного кода Javascript переносит выполнение ряда задач на время после загрузки страницы. Таким образом важная визуальная информация отображается раньше, а веб-сайт загружается быстрее. Подробнее об отложенном выполнении javascript см. на web.dev
Следующий ряд настроек я бы рекомендовал использовать с осторожностью, так как некоторые из них могут вызвать конфликты, тем самым нарушив работу функций JavaScript.
Объединить и минифицировать CSS и JS
Объединить и минифицировать CSS и JS: объединяет и сжимает ресурсы JavaScript и CSS, чтобы снизить количество и объём запросов к серверу, что позволяет быстрее загружать контент.
Опытные пользователи могут найти для себя полезную настройку — исключений JS:
CDN изображений
CDN изображений позволяет вашему сайту загружать изображения автоматически изменённого размера в современных веб-форматах прямо из всемирной сети доставки контента Jetpack.
Руководство по изображениям — функция, необходимая всем, кому требуется оптимизировать изображения на веб-сайте. С помощью этого руководства вы сможете гарантировать отображение всех изображений на вашем веб-сайте в нужном размере. Это необходимо для удобства пользователей, быстрой загрузки страниц и повышения рейтинга сайта. Следуя советам и методикам, приведённым в руководстве, вы сможете уменьшить размеры файлов изображений и ускорить загрузку вашего веб-сайта.
Ну вот и всё! В несколько кликов мы заложили неплохой фундамент для повышения производительности нашего сайта на WordPress.
const currentYear = new Date().getFullYear().toString();
new Date() — создаём объект который хранит в себе текущий момент времени
getFullYear() — выдёргиваем из объекта год указанной даты. Так как мы создавали экземпляр Date() без аргументов, то год будет соответствовать текущему моменту, а следовательно быть актуальным
toString() — возвращаем тип данных строку.
Ну вот и всё! Теперь в константе currentYear будет находится текущий год
Забыли пароль пользователя? Не беда! В этой статье мы его восстановим при помощи командной строки и инструмента WP-CLI (WP Command Line Interface) — это интерфейс командной строки для WordPress.
Откройте терминал, выберите директорию с нужным сайтом и введите первую команду:
wp user list
Эта команда отобразит всех пользователей вашего сайта.
В WooCommerce есть крайне полезная функция Рекомендуемых товаров, которую, в силу каких то причин, мало кто использует ?♂️
В этой обзорной статье мы рассмотрим функцию Рекомендуемые товары.
Как включить Рекомендуемые товары?
Для этого перейдите в раздел всех товаров и первым делом убедитесь в настройках экрана, что у вас включен столбик, при помощи которого ставится эта отметка принадлежности товара к избранным (рекомендуемым)
при включенном отображении у вас в таблице товаров должен находится столбик со звёздочками. Именно при помощи него можно отмечать товары, как избранные.
второй способ, при помощи которого вы можете отметить товар, находится в разделе Свойства. В каждой карточке товара при быстром редактировании (нажав Свойства) можно также управлять принадлежностью того или иного товара к Рекомендуемым.
Если необходимо массово изменить статус Рекомендуемых товаров, то удобным способом будет массовое редактирование. Выделяем нужные товары, и нажимаем Изменить
После этого в режиме массового редактирование устанавливаем Да или Нет
В режиме редактирования карточки товара функция отметки товара как Рекомендуемый тоже доступна, правда немного скрыта. Нужно распахнуть раздел в блоке Опубликовать:
и сделать отметку
Как выводить рекомендуемые товары?
Что ж, мы отметили ряд товаров, как Рекомендуемые и теперь наша задача вывести их отдельно на странице. Для этого в WooCommerce есть полезный и безопасный для новичков функционал — шорткоды, при помощи которых мы выведем наши Рекомендуемые товары.
Создайте произвольную страницу и в тело страницы вставьте вот этот шорткод [featured_products]. У меня это выглядит вот так:
Теперь, перейдя на эту страницу в публичной части сайта, мы увидим наши отмеченные товары
А при помощи специальных атрибутов, описание которых доступно в документации, можно кастомизировать вывод наших товаров. В данном примере я использую другой шорткод, но с атрибутами, которые позволяют выводить те же Рекомендуемые товары, но только в верстке двух колонок:
Вывод при помощи виджетов
В разделе виджеты доступны независимые блоки для вывода Рекомендуемых товаров. Они не зависимы от ваших отметок, которые мы рассматривали ранее. То есть добавив этот блок вам необходимо заново отметить товары которые будут выступать в качестве Рекомендуемых. По сути это отдельный функционал. Что бы избежать путаницы я бы его назвал иначе, например, Группировка товаров или Избранные.
Добавив блок нужно отметить заново товары.
Это справедливо и для категорий. То есть можно выводить все товары которые принадлежат Избранной категории.
Учтите, что это разные функционалы. И отмеченные ранее товары как Рекомендуемые не будут учитываться в этих блоках.
Задача: Экспортировать отдельный фрейм в формате PDF.
Экспорт отдельного фрейма
Решение: Выделяем файл для экспорта
Справа, в разделе Экспорта нажимаем на «плюсик»
Затем выбираем нужный формат — PDF
и нажимаем Export …
Выделенный фрейм будет экспортирован как файл в формате PDF
Экспорт всех фреймов по отдельности
Если стоит задача экспортировать все фреймы на странице, как отдельные файлы, то есть, для каждого фрейма свой файл, то для этого необходимо выбрать нужные фреймы и потом повторить последовательность действий описанных выше.
Экспорт этих слоёв произойдет в заархивированном виде. Внутри архива будут выделенные фреймы каждый в своём файле.
Экспорт всех фреймов в единственный файл
Если требуется экспортировать все фреймы одним файлом PDF, то для этого нам нужно обратится к меню в левом верхнем углу веб-страницы. Menu > File > Export frames to PDF…
Учтите, что в этом случае будут экспортированы все фреймы на вашей странице, в той последовательности, в которой они располагаются слева направо.
Вот итоговый файл после экспорта:
Для наглядности вы можете посмотреть процедуру экспорта в этом видео:
Как экспортировать одним файлом выборочные фреймы?
Невольно напрашивается вопрос: а как же сделать экспорт отдельных фреймов в единственный файл PDF? Здесь можно прибегнуть к небольшой хитрости — перенести (скопировать) их на отдельную страницу и затем осуществить экспорт, либо временно удалить фреймы которые не должны попадать в экспорт, сделать экспорт и потом вернуть удалённые фреймы обратно.
Пожалуй, самый простой и быстрый способ решить эту задачу является заключение текста в специальный HTML-элемент <marquee>, который используется для создания на странице прокручивающегося текста (бегущей строки).
Текс помещенный в теги этого элемента сразу начинает выполнять прокрутку. Ниже можно увидеть пример:
<marquee>Каждая кухарка должна научиться управлять государством</marquee>
<marquee
direction="left"
bgcolor="yellow"
width="480"
behavior="scroll"
style="display:block">
<span>Каждая кухарка должна научиться управлять государством</span>
</marquee>
Однако, данный элемент имеет пометку Deprecated — т.е. считается устаревшим и не рекомендуется к использованию, так как в любой момент его поддержка может быть исключена из современных браузеров и он перестанет выполнять функцию прокрутки. Эти риски нужно понимать.
Реализация на CSS
Ранее мы решили эту задачу мгновенно за счёт HTML, а теперь давайте рассмотрим пример на CSS.
Вот такой вид будет иметь наш HTML
<div class="scroll-wrap">
<div class="scroll-text">Каждая кухарка должна научиться управлять государством.<div>
</div>
А вот такой CSS:
.scroll-wrap {
overflow: hidden;
}
.scroll-text {
transform: translateX(100%);
animation: scroll-animation 15s linear infinite;
}
@keyframes scroll-animation {
from {
transform: translateX(100%);
}
to {
transform: translateX(-100%);
}
Каждая кухарка должна научиться управлять государством.
Если требуется скрыть товары которых нет в наличии, то необходимо выполнить два условия:
Включить функцию Управления запасами. Перейдите в раздел WooCommerce > Настройки > вкладка Товары > Запасы и включите функцию управления запасами
Далее, в нижней части страницы отметьте чекбокс Спрятать отсутствующие товары из каталога
Вот и всё! Теперь давайте посмотрим, как это работает. Перейдём в карточку любого товара к разделу его статуса:
Когда отмечен статус В наличии мы можем наблюдать наш товар на витрине нашего электронного магазина:
Теперь поставим настройку Нет в наличии и снова обратимся к витрине нашего магазина:
Товар исчез. Так мы и ожидали. Но что будет, если попробовать найти его через поиск?
Да! Ожидаемое поведение, хороший UX. Исключенные товары (которых нет в наличии) при этой настройке не доступны для поиска.
Но у нас остался ещё один статус — Предзаказ. Давайте отметим его и посмотрим, что из этого получится.
Товар появится на витрине
Товар будет доступен для поиска
Получается, что эта настройка не относится к исключаемой. Но что если нам необходимо показывать товары которые есть в только наличии и скрывать товары которых нет в наличии и которые имеют статус предзаказа? В этом случае быстро задачу можно решить при помощи кода. Небольшой сниппет, который необходимо добавить к функциям вашей активной темы или вот этим безопасным методом.
В WordPress есть специальный хук-action pre_get_posts, который позволяет изменять информацию экземпляра текущего запроса $wp_query и при помощи «сеттеров» мы можем повлиять на текущий запрос. Выглядит в виде кода это примерно так:
add_filter( 'pre_get_posts', 'poet_show_in_stock_only', 100 );
function poet_show_in_stock_only( $query ) {
// не админка и это основной запрос с публичной части сайта
if ( ! is_admin() && $query->is_main_query() ) {
$query->set(
'meta_query',
[
[
'key' => '_stock_status',
'value' => [ 'outofstock', 'onbackorder' ], // исключаем
'compare' => 'NOT IN'
]
]
);
}
}
На самом деле тут нет ничего хитрого. Мы подключились в момент вызова это «экшена» с нашей функцией и сразу начали с проверки того, что: это не административная часть (т.к. запрос предназначен только для публичной, клиентской части сайта). Далее проверка что это основной запрос который выполняется в стандартном цикле WordPress и далее при помощи set мы устанавливаем новые аргументы в наш запрос, в которых исключаем товары со статусом: нет в наличии и предзаказ.
Но этого мало. При помощи условных тегов, которые справедливы только для WooCommerce, мы можем конкретизировать наш запрос и добавить ещё блок условий при которых будет вызываться наш «сеттер»:
add_filter( 'pre_get_posts', 'poet_show_in_stock_only', 100 );
function poet_show_in_stock_only( $query ) {
// не админка и это основной запрос с публичной части сайта
if ( ! is_admin() && $query->is_main_query() ) {
if ( is_shop() || is_product_category() || is_product_tag() ) {
$query->set(
'meta_query',
[
[
'key' => '_stock_status',
'value' => [ 'outofstock', 'onbackorder' ],
'compare' => 'NOT IN'
]
]
);
}
}
}
is_shop() — Главная архивная страница товаров (как правило адрес /shop/ )
is_product_category() — Страница Категории товаров
is_product_tag() — аналогично Категории, но только страница каталога с товарами объединённых определённым тегом (меткой)
После добавления данного кода будут отображаться товары только со статусом В наличии (instock), а Нет в наличии (outofstock) и Предзаказ (onbackorder) — скрыты.