Понедельник, 09 августа 2021 г.

Wordpress - довольно простой движок для администрирования сайтов различной направленности. Однако структура самого движка такова, что "подводные камни" могут быть везде. В том числе, и в плане изменения функционала сайта и его внешней кастомизации.

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

Для создания дочерних тем есть множество плагинов. Но мне удобнее создавать их самому через ssh-консоль. Подключаемся к сайту по ssh, переходим в директорию тем сайта /wp-content/themes/ и в ней создаём новую директорию с любым названием. Я новую тему обычно называю, как домен сайта.

[root@server ~]# mkdir /home/user/web/site.ru/public_html/wp-content/themes/site

В ней создаём два обязательных файла, которые формируют костяк дочерней темы:

[root@server ~]# touch /home/user/web/site.ru/public_html/wp-content/themes/site/functions.php

и

[root@server ~]# touch /home/user/web/site.ru/public_html/wp-content/themes/site/style.css

Ну и для красоты можно загрузить в эту же директорию screenshot.png или screenshot.jpg размерами 1200 на 900 пикселей. Это будет обложка темы.

Если пользователь, от которого работает сайт, отличается от пользователя, которым заходим по ssh (в примере заходим под root, а сайт принадлежит пользователю user), меняем владельца на нужного:

[root@server ~]# chown -R user /home/user/web/site.ru/public_html/wp-content/themes/site

Подготовительная часть завершена. Теперь подключим тему к родительской. Предположим, родительской темой будет Astra. Тогда в файле style.css пишем:

/*
Theme Name: Site
Author: User // Любое своё имя, можно, хотя и нежелательно, русскими буквами
Author URI: https://site.ru/ // Свой сайт
Description: Main theme of site
Template: astra
Version: 1.0.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: siteru
*/

Маркером я выделил то, что надо заменять на своё. Кстати, если создавать файлы через nano или vim, можно сразу вписывать нужный код. Обязательные строки тут Theme Name (название новой темы), Template (название родительской темы) и Text Domain (префикс для подключения файлов перевода. Даже если их не будет, строка необходима). Если прямо сейчас зайти в консоль Wordpress, то можно увидеть в описании новой темы "Это дочерняя тема для Astra". Но тему активировать рано. Надо подключить файл стилей родительской темы и файл стилей дочерней темы. Часто пишут, что файл стилей дочерней темы подключается автоматически. Не знаю, почему, у меня так не срабатывает. Поэтому я его тоже подключаю явно. В functions.php пишем такой код:

<?php
/**
 * Site functions and definitions
 *
 * @link https://developer.wordpress.org/themes/basics/theme-functions/
 *
 * @package WordPress
 * @since 1.0.0
 */ if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly.
} function site_styles() {
    wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
  wp_enqueue_style( 'child-style', get_stylesheet_uri() );
}
add_action('wp_enqueue_scripts', 'site_styles');

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