Вопрос или проблема
Я использую WordPress мультисайт и мне нужно отображать контент на всех подсайтах в боковой панели. Это сеть из более чем 50 сайтов, поэтому обновлять боковые панели на всех 50+ сайтах с этим контентом каждые несколько дней не практично.
Одно из решений, которое я нашел, это просто вставить нужный контент в sidebar.php в редакторе тем, хотя я не хочу, чтобы мой клиент редактировал этот файл, и хочу, чтобы он использовал редактор TinyMCE вместо HTML.
Еще одна идея заключалась в том, чтобы встроить iframe на каждый подсайт и позволить моему клиенту обновлять страницу, на которую ссылается iframe.
И последняя идея, которую я имел, заключалась в создании плагина с редактором TinyMCE, который бы внедрял код в файл sidebar.php при сохранении, хотя я не знаю, доступно ли редактирование файлов тем для плагинов.
Есть ли лучшее решение, о котором я не думаю? Я пробовал несколько плагинов без успеха, не пропустил ли я что-то?
Можно использовать административную панель вверху вместо этого? Мне кажется, короткие сообщения выглядят лучше там.
add_action( 'admin_bar_menu', 'toolbar_link_to_mypage', 999 );
function toolbar_link_to_mypage( $wp_admin_bar ) {
$args = array(
'id' => 'my_admin_bar_text',
'title' => 'WELCOME TO SYDNEY',
'meta' => array( 'class' => 'my-toolbar-page' )
);
$wp_admin_bar->add_node( $args );
}
Также вы можете создать короткое сообщение на боковой панели, но оно должно оставаться довольно коротким. Код для этого будет:
add_action( 'admin_menu', 'register_my_custom_menu_page' );
function register_my_custom_menu_page(){
add_menu_page( 'custom menu title', 'custom menu', 'manage_options', 'custompage', 'my_custom_menu_page', plugins_url( 'myplugin/images/icon.png' ), 6 );
}
function my_custom_menu_page(){
echo "Admin Page Test";
}
Это добавит ссылку “custom menu” слева (прямо под Записями). Вы можете назвать “custom menu” как угодно, и это имеет дополнительное преимущество создания страницы, на которой вы можете разместить больше информации, если хотите.
Оба этих варианта, когда они включены на сетевом сайте, не могут быть отключены для каждого блога. Если они не активированы в сети, то их можно включать и отключать для каждого блога каждым администратором блога.
Примечание: первый фрагмент кода выше, я не помню, откуда он, он использовался в разных местах на протяжении некоторого времени. Второй фрагмент из WP Codex, http://codex.wordpress.org/Function_Reference/add_menu_page
Я оказался в подобной ситуации, когда хотел, чтобы один и тот же контент отображался на всех подсайтах мультисайта, и также чтобы контент можно было редактировать через Панель управления главного сайта > Виджеты. Я зарегистрировал боковые панели в нижнем колонтитуле главного сайта, но изначально редактирование виджетов главного сайта не обновляло виджеты в нижнем колонтитуле подсайтов. На самом деле, виджеты подсайтов были совершенно разными.
Потребовалось некоторое время, чтобы найти решение, при котором (1) виджеты боковой панели подсайта будут контролироваться виджетами боковой панели главного сайта и (2) обновления виджетов главного сайта также будут распространяться по сети. Я выяснил, что разработчик нашел решение и задокументировал его здесь: https://redtreewebdesign.com/sharing-caring-wordpress-multisite/, где содержимое боковой панели сохраняется в временном хранилище. Я вставил предоставленный код в свой functions.php, и это сработало как по волшебству.
Пост основан на комментарии (https://gist.github.com/lucasstark/132511ab333f0c5fb6c4e82458ba2d20) к другому посту на ту же тему (https://webdevstudios.com/2013/12/17/sharing-sidebars-across-a-multisite-network/), который был написан разработчиками темы, которую я использовал в то время.
Ответ или решение
Вопрос, с которым вы столкнулись, довольно распространён в среде пользователей WordPress Multisite, особенно когда дело касается управления контентом на множестве сайтов. Рассмотрим предложенные вами решения и выделим наиболее эффективные методы.
Проблема
Необходимость обновлять содержимое боковой панели на более чем 50 подсайтах WordPress становится трудоемкой задачей, особенно с частотой обновлений каждый несколько дней. Вы уже рассмотрели несколько подходов, включая изменение файлов темы и использование iframe, но оба метода имеют свои недостатки. Работа с кодом может вызвать затруднения у клиентов, а использование iframe может негативно сказаться на пользовательском опыте и SEO.
Решения
-
Использование виджетов сети:
- В WordPress Multisite существует возможность создания глобальных виджетов, которые могут управляться из главного сайта. Это наиболее интуитивный и удобный вариант, позволяющий вашим клиентам не углубляться в код.
- Разработайте плагин, который добавит виджет для управления контентом в боковой панели, в котором будет использоваться редактор TinyMCE. Создайте новый виджет и зарегистрируйте его через API WordPress в функции
register_sidebar_widget()
. - Сохраните данные виджета в опциях или транзиентах и извлекайте их при отображении боковой панели на подсайтах.
-
Кастомизация через пользовательские поля или настройку плагина:
- Создайте пользовательскую админ-панель на главном сайте, которая позволит клиенту вводить текст для боковой панели. При помощи
add_menu_page()
иadd_submenu_page()
вы можете создать интерфейс, где этот текст можно легко редактировать. После внесения изменений сохраняйте данное содержимое в option или transient. - В функции
wp_footer()
или в соответствующей функции боковой панели устанавливайте код, который проверяет наличие сохранённого контента и выводит его на экран.
- Создайте пользовательскую админ-панель на главном сайте, которая позволит клиенту вводить текст для боковой панели. При помощи
-
Кастомизация с помощью плагинов:
- Существуют плагины, такие как Multisite Content Copier, которые позволяют копировать контент между сайтами. Проверьте наличие подобных решений на официальном сайте WordPress или на GitHub, которые могут сэкономить время.
-
Использование кода для синхронизации сайдбаров:
- Как вы упомянули, решение на основе кода из redtreewebdesign является хорошим вариантом. В данном коде используется хранение контента в транзиентах, что позволяет обновлять его на всех подсайтах одновременно. Убедитесь, что учитываете использование кэша, чтобы загружать актуальные данные.
Рекомендации
- Безопасность: Убедитесь, что ваш код проходит проверки на безопасность, особенно если используете редактор. Возможны уязвимости через XSS и другие атаки.
- Тестирование: Перед внедрением решения на продакшн-сайты протестируйте его на локальной установке или заглушке.
- Документация: Разработайте подробную документацию для клиента, чтобы он понимал, как необходимо обновлять данные и какие действия выполнять, чтобы избежать ошибок.
Эти предложения должны помочь вам эффективно внедрить нужное решение с минимальными временными затратами. Поскольку система WordPress Multisite предназначена именно для удобства управления несколькими сайтами, использование возможностей платформы поможет сделать ваш процесс более удобным и безопасным.