Мультисайты WordPress: Практические функции и методы

Мультисайты это новая мощная функция, которая появилась с выходом WordPress 3.0. Это позволяет менеджерам веб-сайтов размещать несколько независимых сайтов при помощи одной установки WordPress. Хотя каждый “сайт” в сети является независимым, есть много способов делиться настройками, кодом и контентом по всей сети.


WordPress Multisite

С начала года, я занимался разработкой тем и плагинов для контентных сетей на основании мультисайтов WordPress. За это время я узнал много действенных советов и приемов, уникальных для мультисайтов. Это руководство познакомит вас с несколькими специфичными для мультисайтов функциями, наряду с реальными примерами программирования, которые вы можете начать использовать уже сегодня. Надеюсь, это откроет вам глаза на некоторые из новых возможностей, доступных для мультисайтов.

Зачем использовать мультисайты

Мультисайты это отличный выбор для фрилансеров, предприятий и организаций, которые управляют несколькими WordPress сайтами. Будь вы фрилансер, который хочет предоставлять хостинг и обслуживать клиентов, учебная организация желающая централизовать управление своим веб-сайтом, или большой издатель новостей пытающийся обособить разные отделы, мультисайты это ответ.

Управление несколькими веб-сайтами с помощью одной установки WordPress позволяет легко обновлять ядро, плагины и темы для каждого сайта в сети. Вы можете разделить функциональность между несколькими веб-сайтами с помощью сетевых плагинов, а также стандартизировать элементы дизайна нескольких сайтов с помощью родительской темы.

Обзор преимуществ

  • Пользователи могут легко получить доступ и управлять несколькими веб-сайтами используя одну учетную запись пользователя и профиль.
  • Пользователи могут получить доступ к определенному веб-сайту или к каждому веб-сайту, используя один и тот же аккаунт.
  • Информация одного сайта может быть полностью изолирована от других.
  • Информацией одного сайта можно легко поделиться с другими.
  • Функционал темы может быть общим для нескольких сайтов с использованием взаимосвязи тем родитель-ребенок или функциональность плагина.
  • Обновление и модернизация может быть развернута на нескольких веб-сайтах за меньший промежуток времени, уменьшая накладные расходы и стоимость технического обслуживания.
  • Кастомизации WordPress могут эффективно распространяться централизованным, каскадным методом с использованием общесетевых плагинов.

Я не буду объяснять, как устанавливать и настраивать мультисайты. Если вам нужна помощь, множество замечательных статей доступно в WordPress Codex.

Работа с функциями мультисайтов

Установки WordPress поддерживающие мультисайты содержат дополнительные функции и возможности, которые разработчики тем могут использовать, чтобы улучшить восприятие веб-сайта. Если вы решили стать разработчиком тем и плагинов для мультисайтов WordPress, воспользуйтесь следующими советами, чтобы кастомизировать и улучшить связность сети.

Отображение информации о сети

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

Мультисайты хранят глобальные параметры в таблице wp_sitemeta базы данных, такие как название сети (site_name), адрес электронной почты администратора (admin_email) и главный URL сайта (siteurl). Для доступа к этим опциям, вы можете использовать функцию get_site_option().

В этом примере я использовал функцию get_site_option() вместе с get_blog_count() и get_user_count() для отображения предложения с подробной информацией о сети.

<?php if( is_multisite() ): ?>

   The <?php echo esc_html( get_site_option( 'site_name' ) ); ?> network currently powers <?php echo get_blog_count(); ?> websites and <?php echo get_user_count(); ?> users.

<?php endif; ?>

Этот небольшой фрагмент кода будет отображать следующий HTML:

The Smashing Magazine network currently powers 52 websites and 262 users.

Много полезных функций мультисайтов можно найти в файле /wp-includes/ms-functions.php. Я настоятельно рекомендую просматривать Trac project самостоятельно. Это отличный способ найти новые функции и ознакомиться с стандартом написания кода WordPress.

Построите меню навигации по сети

Многие сети имеют последовательную динамическую навигацию, которая отображается на всех веб-сайтах, что облегчает для посетителей просмотр сети. С помощью класса базы данных $wpdb и функций get_site_url(), home_url(), get_current_blog_id(), switch_to_blog() и restore_current_blog(), мы можем создать полностью динамическое меню сети, в том числе класс (.current-site-item) для выделения текущего сайта.

SQL запрос который мы создали в этом примере вполне может стать очень большим, что может вызвать проблемы с производительностью. По этой причине, мы будем использовать Transients API, которое позволяет временно хранить кэшированную версию результатов в виде “временных данных” сайта сети в таблице sitemeta, используя функции set_site_transient() и get_site_transient().

Временные данные предоставляют простой и стандартизированный способ хранения кэшированных данных в базе данных в течение определенного периода времени, по истечении которого данные становятся не актуальными и удаляются. Это очень похоже на хранение информации с помощью Options API, за исключением того, что здесь имеется дополнительное значение определяющее срок годности. Временные данные также ускоряются за счет кэширования плагинов, в то время как обычные опции нет. В связи с процессом устаревания, никогда не рассчитывайте на то, что временные данные находится в базе данных при написании кода.

SQL запрос будет выполняться каждые два часа, и фактические данные будут получены из временных данных, что делает все гораздо более эффективным. Я включил два параметра, $size и $expires, что позволяет контролировать количество получаемых постов, и срок годности временных данных.

Один из самых мощных элементов данного примера это использование switch_to_blog() и restore_current_blog(). Эти две функции мультисайтов позволяют временно переключиться на другой веб-сайт (по ID), собирать информацию или контент, а затем вернуться к первоначальному сайту.

Добавьте следующий код в файл functions.php вашей темы:

/**
 * Build a list of all websites in a network
 */
function wp_list_sites( $expires = 7200 ) {
   if( !is_multisite() ) return false;

   // Because the get_blog_list() function is currently flagged as deprecated
   // due to the potential for high consumption of resources, we'll use
   // $wpdb to roll out our own SQL query instead. Because the query can be
   // memory-intensive, we'll store the results using the Transients API
   if ( false === ( $site_list = get_transient( 'multisite_site_list' ) ) ) {
      global $wpdb;
      $site_list = $wpdb->get_results( $wpdb->prepare('SELECT * FROM wp_blogs ORDER BY blog_id') );
      // Set the Transient cache to expire every two hours
      set_site_transient( 'multisite_site_list', $site_list, $expires );
   }

   $current_site_url = get_site_url( get_current_blog_id() );

   $html = '
      ‘ . “\n”; foreach ( $site_list as $site ) { switch_to_blog( $site->blog_id ); $class = ( home_url() == $current_site_url ) ? ‘ class=”current-site-item”‘ : ”; $html .= “\t” . ‘

    • blog_id . ‘”‘ . $class . ‘>‘ . get_bloginfo(‘name’) . ‘

‘ . “\n”; restore_current_blog(); } $html .= ‘

' . "\n\n";

   return $html;
}

(Пожалуйста, обратите внимание: функция get_blog_list() в настоящее время устарела и …

Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров

Comments are closed.