Multisite – создание нового сайта с предварительно обработанными страницами, меню и т. Д.

Я разрабатываю сайт, где пользователи будут создавать свои собственные подсайты.

При создании нового сайта мне нужно будет заполнить его несколькими страницами, настройками меню и т. Д. Есть ли простой способ сделать это, любой крючок для использования?

Правильный крючок для этого – wpmu_new_blog . Я опишу, как мы это делаем в Multilingual Press Pro . Наш код на самом деле довольно сложный; Я извлечу самые важные моменты.

Мы предлагаем возможность выбрать любой существующий блог в качестве шаблона для нового блога. Самое приятное, что вы можете редактировать содержимое шаблона, настраивать тему, активировать плагины … как в любом другом блоге. Не нужно обновлять код, когда вы позже передумаете о содержимом по умолчанию.

Для вашего случая использования вы можете просто создать один блог шаблона и взять идентификатор блога.

 add_action( 'wpmu_new_blog', function( $blog_id ) { // copy the template blog here }); 

Что происходит в обратном вызове?

  1. Мы получаем префикс для блога шаблона (ID 44):

     switch_to_blog( 44 ); $template_prefix = $wpdb->prefix; restore_current_blog(); 
  2. Мы удаляем свежие таблицы для нового блога и копируем контент из блога шаблона.

     foreach ( $tables as $table ) { // empty the tables $wpdb->query( 'TRUNCATE TABLE ' . $wpdb->prefix . $table ); // insert template content $wpdb->query( "INSERT INTO $wpdb->prefix$table SELECT * FROM $template_prefix$table" ); } 
  3. Мы восстанавливаем самые важные параметры для нового блога ( blogname , home , admin_email и т. Д.) И переименовываем user_roles в соответствии с текущим блогом.

  4. Затем мы копируем вложения. Это … не просто. wp_upload_dir() не является надежным после switch_to_blog() . Вы должны добавить некоторые обходные пути, чтобы получить правильные пути. Это фактически отдельный класс с 250 строками. 🙂

Существуют и другие проблемы, такие как плагины для сопоставления доменов, настраиваемые таблицы плагинов и некоторые незначительные проблемы с совместимостью с другими плагинами с использованием того же самого крючка или тем и плагинов, ожидающих вызова установки. Они не должны беспокоить вас, когда вам просто нужно решение для одного сайта.