Intereting Posts
фильтр wp_query результат с настраиваемыми значениями поля Контент редактируемый CPT-архив? Multisite в подпапке – как сделать новые сайты одинаковыми подпапками в качестве основного сайта Архивы пользовательских сообщений и одиночные страницы, не отображающие данные пользовательской таксономии Как сделать два коротких кода использовать один и тот же идентификатор и увеличить его, когда я использую их несколько раз? Создайте галерею с помощью Custom Post Type и добавьте галерею сумм в качестве вспомогательной галереи Main Gallery Удалить разрывы строк в wp_list_categories ()? Как перечислить CPT в течение одного налогового периода Пользовательская константа post postink использует страницу архива для отображения сообщений Как удалить все экземпляры edit_post_link Как отобразить сообщение об обновлениях в списке плагинов Buddypress: удалить вкладку форума на странице профиля пользователя? Шрифт WordPress для отображения только избранных изображений Что такое comment_karma? Редактор удаляет теги <p>

switch_to_blog () и wp_nav_menu () не работают должным образом

У меня есть плагин MU, активный в сети с этой небольшой функцией, чтобы запросить меню 4 с основного сайта в моей сети. На главном сайте в сети (1) все работает так, как ожидалось.

На субсайтах в сети (2,3,4) меню не отображается (поскольку у меня есть резервный набор в false, и меню не найдено).

Мне интересно, если я что-то делаю здесь неправильно, или если что-то большее идет не так.

/** * Multisite menu */ function wp_multisite_nav_menu() { global $blog_id; $args = array( 'menu' => 4, 'fallback_cb' => false, 'menu_class' => 'main-nav', 'depth' => 0, ); if ( ! is_multisite() || 1 == $blog_id ) { wp_nav_menu( $args ); return; } // switch to blog, and query switch_to_blog( 1 ); wp_nav_menu( $args ); // switch back to original blog restore_current_blog(); } 

Я вижу, что switch_to_blog правильно переключается, так как я могу получить данные с основного сайта с помощью get_bloginfo( 'name' ); и get_the_title( 123 ); без каких-либо проблем.

В качестве альтернативы, если это не лучший способ сделать это – я готов к дополнительным решениям.

После небольшой отладки я смог сузить это до следующего:

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

По какой-либо причине пользовательский тип сообщения должен быть зарегистрирован на каждом сайте в сети, где вы будете отображать меню (2,3 и т. Д.).

Это можно сделать так же, как это было сделано на родительском сайте верхнего уровня (1), но show_ui на false внутри вызова register_post_type , чтобы предотвратить появление пользовательского типа сообщения в меню администратора дочернего сайта.