Выбор (назначение определение) темы через mu-plugins
есть ли возможность установить, т.е. назначить, выбрать тему сайта через PHP функцию и вставить её в mu-plugins или wp-config ??
- интересует именно это PHP решение, альтернативы не нужны.
есть у меня 3 сайта, полностью одинаковые, 1 оригинал, остальные для теста редакторов, тем и плагинов, периодически в 2-х тестовых обновляю БД (в тупую дублирую), и надоело каждый раз переключать тему. Знаю что можно колдовать с таблицами в бд, просто дампить часть базы, использовать плагины, сливать БД воедино и тд , но так не хочу.
походу нашел решение, но еще не тестировал
// для плагина add_filter( 'stylesheet', 'switch_ma_theme' ); add_filter( 'template', 'switch_ma_theme' ); function switch_ma_theme() { // Return the theme directory name return SOME_FLAG ? 'theme-1' : 'theme-2'; } // еще одно решение wp-config.php define('TEMPLATEPATH', '/absolute/path/to/wp-content/themes/active-theme-or-parent-theme'); define('STYLESHEETPATH', '/absolute/path/to/wp-content/themes/active-theme-or-child-theme');
Т.е. при смене темы на одном сайте, должна меняться тема на всех 3-х сайтах? Сайты связаны сетью?
нет, сайты никак не связаны, на каждом из сайтов своя независимая тема. Просто хочу чтоб при переносе базы данных с одного сайта на другой, mu-plugins автоматически устанавливал нужную тему не взирая на настройки БД.
Я ниже прикинул примерный алгоритм. Только там не меняем тему функцией switch_theme(), а сохраняем в БД название нужной темы. При загрузке страниц, фильтруем 'stylesheet' и 'template', где берем название из БД, делаем всякие проверки (например, есть ли указанная тема) и возвращаем нужное название.
да я сначала написал, потом тоже подумал, такой вариант тоже приемлем, сделать php проверку на соответствие название темы , и если тема не то в писать нужную в БД ...
Криво и сыро:
При after_setup_theme копируем папку темы на все сайты. CURL-ом (wp_remote_post) пингуем нужные сайты с нужными параметрами, например switch_theme=название_темы.
Если есть $_POST['switch_theme'] проверяем есть ли тема, какая сейчас активна, и с помощью switch_theme() меняем тему. Все это дело пихаем в му-плагин, ставим на все сайты. Нужно не забыть при after_setup_theme проверять наличие $_POST['switch_theme'], чтобы не делались лишние curl-запросы.
Если сайты в сети, тут вроде проще. Получаем все blog_id (wp_get_sites), проходимся по всем, переключаясь на каждый без редиректа (switch_to_blog), выполняем switch_theme(). Походу нужно восстановить текущий блог (restore_current_blog) после каждого switch_to_blog.
Короче нужно тестить, однозначно рабочий вариант вряд ли у кого-то есть...