Intereting Posts
Обновить все фотографии после импорта Загружает ли файл JavaScript автоматически для файла index.php? Создание электронной почты для обновления метаданных Как показать сообщение об ошибке после публикации публикации? Проблема с использованием role_has_cap hook Отображение пользовательского типа сообщения в другом с иерархическим пугом Назначение цветов разных категорий для разных категорий в главном меню Почему WordPress добавляет тему не перечислить конкретную тему? Список категорий Обновления плагина с ошибкой с фатальной ошибкой Последние сообщения на статической домашней странице Пользовательское меню администратора для всех ролей пользователей Можно ли сделать заголовок на странице другого текста текстом пункта меню? Ограничение на обновление блога Кодовая таблица структуры базы данных Первая страница не загружается после обновления версии PHP (ec2)

WordPress Multisite: иметь одинаковый заголовок и нижний колонтитул основного блога во всех суб-блогах

Я пытаюсь сделать следующее:

У меня есть главный блог и десятки субблоков. Я хочу, чтобы все субблоки использовали одну и ту же тему (или дочернюю тему, еще не уверенную), но имеют одинаковые навигационные элементы основного блока на всех субблогах? То же самое для нижнего колонтитула.

Как я это сделал?

Это мой основной блог и Landing-Page

введите описание изображения здесь

Если я нажму на Subblogs и выбрал Subblog, я просто хочу, чтобы область содержимого была затронута, заголовок и нижний колонтитул должны оставаться неизменными во всей сети.

введите описание изображения здесь

Внутри области содержимого субблока я бы хотел использовать страницы и сообщения субблока.

Каков правильный способ сделать это?


Обновить:

<ul role="navigation"> <?php //wp_list_pages('title_li=&depth=1&exclude=42,311'); $args = array( 'authors' => '', 'child_of' => 0, 'date_format' => get_option('date_format'), 'depth' => 1, 'echo' => 0, 'exclude' => '42,311', 'include' => '', 'link_after' => '', 'link_before' => '', 'post_type' => 'page', 'post_status' => 'publish', 'show_date' => '', 'sort_column' => 'menu_order, post_title', 'title_li' => '', 'walker' => '' ); $menu = wp_list_pages( $args ); update_option('network_menu', $menu); echo $menu; ?> </ul> 

в моей детской теме:

 <ul role="navigation"> <?php $menu = get_option('network_menu'); echo $menu; ?> </ul> 

Solutions Collecting From Web of "WordPress Multisite: иметь одинаковый заголовок и нижний колонтитул основного блога во всех суб-блогах"

Вы можете использовать switch_to_blog()

Переключает активный блог до тех пор, пока пользователь не вызовет функцию restore_current_blog (). Эта функция полезна, если вам нужно вытащить сообщения или другую информацию из других блогов, затем вы можете вернуться после использования restore_current_blog (). Использование этой функции не будет загружать плагины, которые запускаются только в блоге, на который вы переключаетесь.

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

В файлах header.php и footer.php темы theme (и, возможно, некоторые другие файлы шаблонов **), поставьте switch_to_blog($id_of_main_blog) перед перехватами / функциями, которые захватывают навигацию по сайту и помещают restore_current_blog() после.

** Вам нужно будет настроить точные места размещения в зависимости от темы.

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

Вместо этого верните меню в переменную, передайте это update_option, а затем повторите его. В header.php вашей дочерней темы замените все это вызовом get_option () и выполните эхо-результаты.

Родительская тема:

  $args = array('echo' => false); $menu = wp_nav_menu( $args); update_option('network_menu', $menu); echo $menu; 

Детская тема:

  $menu = get_option('network_menu'); echo $menu; 

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

Самый гибкий подход – превратить эту функциональность в плагин. Если вы отбросите это в своей папке mu-plugins, он будет автоматически использоваться на всех сайтах. В качестве альтернативы вы можете просто активировать ее для достижения такого же эффекта. Преимущество этого подхода заключается в том, что вы можете легко включать или выключать его, и это делает этот аспект вашего сайта модульным, что может помочь при тестировании темы.

Из Кодекса

Переключите текущий блог в другой блог. switch_to_blog (), полезно, если вам нужно вытащить сообщения или другую информацию из других блогов.

Вы можете вернуться назад с помощью функции restore_current_blog (). Обратите внимание, что эта функция отменяет только последнее действие переключения блога, как правило, самый последний вызов switch_to_blog (). См. Пример ниже о том, как действовать, когда используются несколько switch_to_blog ().

Некоторые люди говорят, что switch_to_blog () ресурсоемкий, но у меня не было никаких проблем с ним во время моего тестирования.

Andrea R написал плагин, который подходит к этой проблеме с помощью кэширования WordPress, а затем очищает кеш при обновлении, но метод ниже является более гибким.

Я опишу базовый пример, который вы можете построить. На самом деле это ничего не добавляет к верхнему или нижнему колонтитулу, поэтому вам нужно подключиться к своим темам, используя плагин api.

 <?php /** * Plugin Name: Header-Footer * Plugin URI: example.com * Description: * Author: * Author URI: */ $main_site = 1; function make_menu() { $args = array( 'authors' => '', 'child_of' => 0, 'date_format' => get_option('date_format'), 'depth' => 1, 'echo' => 0, 'exclude' => '42,311', 'include' => '', 'link_after' => '', 'link_before' => '', 'post_type' => 'page', 'post_status' => 'publish', 'show_date' => '', 'sort_column' => 'menu_order, post_title', 'title_li' => '', 'walker' => '' ); $menu = wp_list_pages( $args ); update_option('network_menu', $menu); echo $menu; } // Test if we're on a sub-site if (!is_main_site()) { //Switch to the main site switch_to_blog( $main_site ); make_menu(); restore_current_blog(); } // Else use normal methods else { make_menu(); } 

Удачи!