/ Сайтостроение / Wordpress / Дочерние темы

Дочерние темы

23.11.2018

281

Давно хотел разобраться с этой темой и теперь появилась необходимость сделать поддержку дочерних тем на мультисайте.

Создание дочерней темы

Для создания дочерней темы нужно:

  • Создать папку с дочерней темой в папке /themes/ (в той же папке где и родительская). Необязательно называть ее theme-child, но так будет удобнее.
  • Обязательный файл который должен содержаться в дочерней теме — это style.css и в начале этого файла, вот такая запись:
    /* Theme Name: Meisterwerk 2.0 Ivmontan Template: meisterwerk-2 */

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

В дочерней теме могут также дублироваться и остальные шаблоны, стили и скрипты, чтобы их можно было изменять локально. Нельзя дублировать functions.php с теми же функциями — из-за этого произойдет 500 ошибка.

Перезапись style.css

Т.к. обычно я подключаю основной стиль (style.css) из functions.php

function header_enqueue_style() {
   wp_enqueue_style( 'style', get_template_directory_uri() . '/style.css' , array( ), '1.0' , 'screen' );
}
add_action( 'wp_print_styles', 'header_enqueue_style' );

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

Решение:

// Подключение дочернего стиля
add_action( 'wp_enqueue_scripts', 'theme_enqueue_child_styles' );
function theme_enqueue_child_styles(){
 wp_enqueue_style( 'child-style', get_stylesheet_directory_uri() . '/style.css', array('style') );
}

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

Функция или скрипт только для главного сайта

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

Это делается условием по ID сайта (1 — это главный, также можно делать и для дочерних сайтов):

if ( get_current_blog_id() == 1 ) {
	function wptuts_scripts_main() {  
		wp_enqueue_script( 'main-site-scripts', get_template_directory_uri() . '/js/main-site-scripts.js' , array( ), '1.0', true );
	}  
	add_action( 'wp_enqueue_scripts', 'wptuts_scripts_main', 10 );
}

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

Поделится информацией с друзьями

  • Комментарии
  • Вложения

Добавить комментарий

Пока нет комментариев. Будь первым!

Дочерние темы
Fancybox без плагина
Рекомендации для васFancybox без плагинаOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.