Вопрос или проблема
Пытаюсь достичь следующего. Любая помощь/совет будет очень полезен.
1) У меня есть несколько сайтов в поддиректориях, использующих имена wp multisite (например, https://noorshaad.com/uae/, https://noorshaad.com/us/, https://noorshaad.com/uk/).
2) Мне нужно, чтобы каждый домен отображал одинаковый контент и изображения (избранное изображение), НО
3) Показывал другую тему WordPress, плагины и конфигурацию плагинов и т.д.
Вот концептуальный код (т.е. не тестировался, требует доработки), который вы могли бы использовать. С помощью этого примера пост, который вы создадите, будет клонирован на другие подсайты в вашей сети.
function copy_content( $post_id, $post, $update ) {
// проверка на ревизию, автосохранение и т.д.
$args = array(
'site__not_in' => array( get_current_blog_id() ),
);
$sites = get_sites( $args );
$post = $post->to_array(); // объект поста в массив, так как функции вставки/обновления требуют массив
foreach ($sites as $site) {
switch_to_blog( $site->blog_id );
if ( $update ) {
wp_update_post( $post );
} else {
wp_insert_post( $post );
}
restore_current_blog();
}
}
add_action( 'save_post', 'copy_content', 10, 3 );
Другой вариант может заключаться в использовании pre_get_posts
на ваших подсайтах для извлечения постов из основного сайта с постами. Это, например, было рассмотрено здесь, Как я могу использовать pre_get_posts для запроса постов с другого сайта в моей сети multisite?
.
Ответ или решение
Процесс публикации одинакового контента на нескольких сайтах в сети WordPress Multisite может представлять собой сложную задачу, учитывая необходимость различных тем и конфигураций плагинов для каждого сайта. Однако с помощью правильного подхода и использования PHP-функционала WordPress, это можно успешно реализовать.
Теоретическая часть
В сети WordPress Multisite у вас есть возможность управлять несколькими сайтами из одной управляющей панели. Каждый сайт в этой сети может иметь свою уникальную тему, набор плагинов и конфигураций. Однако, чтобы обеспечить единообразный контент на всех этих сайтах но с разными представлениями (темами), необходимо выполнить несколько шагов:
-
Централизованное управление контентом: Благодаря наличию общего контента, который нужно публиковать на всех сайтах, мы можем выбрать один конкретный сайт, с которого контент будет копироваться на остальные.
-
Изменение тем и плагинов: Каждый сайт может иметь уникальную тему и конфигурации плагинов, что требует от нас использование дополнительных инструментов и методов WordPress для управления ими.
-
Автоматизация контент-менеджмента: Для оптимизации процесса публикации одинакового контента на нескольких сайтах вы можете использовать программирование на PHP и потенциально автоматизировать этот процесс.
Пример
Приведенный выше код является отличным примером автоматизации публикации контента. Давайте его разберем:
function copy_content( $post_id, $post, $update ) {
// Исключение ревизий и автосохранений
if ( wp_is_post_revision( $post_id ) ) {
return;
}
$args = array(
'site__not_in' => array( get_current_blog_id() ),
);
$sites = get_sites( $args );
$post = $post->to_array(); // Перевод объекта поста в массив для того, чтобы функции вставки/обновления могли его обработать
foreach ($sites as $site) {
switch_to_blog( $site->blog_id );
// Обновление или вставка поста в зависимости от флага $update
if ( $update ) {
wp_update_post( $post );
} else {
wp_insert_post( $post );
}
restore_current_blog(); // Возврат к основному сайту
}
}
add_action( 'save_post', 'copy_content', 10, 3 );
Этот код выполняет следующее:
-
Функция
copy_content
вызывается каждый раз, когда пост сохраняется. Она проверяет, обновляется ли пост или создается новый, и в зависимости от этого либо вызываетwp_update_post
, либоwp_insert_post
. -
Переключение блога осуществляется с помощью
switch_to_blog()
, что позволяет временно переключать контекст выполнения кода на другой сайт. -
Очистка контекста производится вызовом
restore_current_blog()
, что возвращает выполнение кода к оригинальному блогу.
Применение
Вы также можете рассмотреть использование хуков и фильтров WordPress, чтобы усложнить или упростить ваш процесс. Например:
-
Пользовательские мета-данные: Вы можете сохранить информацию о уже существующих постах на других сайтах в виде мета-данных, чтобы избежать дублирования.
-
Использование плагинов: Существуют плагины, которые расширяют возможности Multisite и предоставляют интерфейс для простого клонирования контента.
-
Настройка файла
wp-config.php
может быть изменена для улучшения производительности и совместимости с мультисайтом.
Дополнительно, использование функций pre_get_posts
позволяет динамично подтягивать контент из одного сайта на другой: это еще один метод, который вы можете использовать, если хотите избежать физического копирования постов, а просто показывать их на других сайтах сети.
В заключение, WordPress Multisite предлагает мощные возможности для управления множеством сайтов из одного места, и настройка автоматического клонирования контента может значительно ускорить процесс управления контентом, оставляя свободу для кастомизации внешнего вида каждого из сайтов. Правильно настроив процессы, вы можете добиться высокоуровневой автоматизации и простой в обслуживании системы сайтов.