Intereting Posts
Автоматическое удаление комментария, если Содержит Почему я не могу войти в систему после перехода на www? «Edit_published_posts» и «edit_other_post» Как сохранить позицию сообщений на домашней странице после случайной функции? 404 Страница не найдена на странице / Страница / 2 / на странице тега Передача переменных через locate_template Обработка формы: как обработать форму перед выходом и получить доступ к данным из короткого кода Как добавить категорию или тег на носитель во время загрузки с помощью загрузчика браузера? Удалить вложение в текстовом окне WP media modal Получить имя пункта меню с помощью wp_nav_menu Короткий код для отображения цикла Использование переходного процесса для динамического css, как его назвать? Как получить имя месяца из архива? Запустить короткий код с определенным разрешением Как вставить пользовательский пост вверху в результатах поиска

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(); } 

Удачи!