Как опубликовать одно и то же содержание на нескольких сайтах?

Вопрос или проблема

Пытаюсь достичь следующего. Любая помощь/совет будет очень полезен.
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 у вас есть возможность управлять несколькими сайтами из одной управляющей панели. Каждый сайт в этой сети может иметь свою уникальную тему, набор плагинов и конфигураций. Однако, чтобы обеспечить единообразный контент на всех этих сайтах но с разными представлениями (темами), необходимо выполнить несколько шагов:

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

  2. Изменение тем и плагинов: Каждый сайт может иметь уникальную тему и конфигурации плагинов, что требует от нас использование дополнительных инструментов и методов WordPress для управления ими.

  3. Автоматизация контент-менеджмента: Для оптимизации процесса публикации одинакового контента на нескольких сайтах вы можете использовать программирование на 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 предлагает мощные возможности для управления множеством сайтов из одного места, и настройка автоматического клонирования контента может значительно ускорить процесс управления контентом, оставляя свободу для кастомизации внешнего вида каждого из сайтов. Правильно настроив процессы, вы можете добиться высокоуровневой автоматизации и простой в обслуживании системы сайтов.

Оцените материал
Добавить комментарий

Капча загружается...