Java, UX, HTML, CSS, WEB-design

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

[ad_1]

  • Кевин Лири

  • 0 Комментарии

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

  • 11 минут чтения

  • WordPress, PHP, Основы, Функции

Краткое резюме ↬

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

Хотя каждый «веб-сайт» в сети независим, существует множество способов обмена настройками, кодом и контентом во всей сети.

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

Дальнейшее чтение на SmashingMag:

  • Расширенное управление WordPress с помощью WP-CLI
  • Как разрабатывать WordPress локально с помощью MAMP
  • Полезные инструменты, темы и плагины WordPress
  • Улучшите и усовершенствуйте разработку темы WordPress

Еще после прыжка! Продолжить чтение ниже ↓

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

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

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

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

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

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

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

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

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

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

Мультисайт хранит глобальные параметры в 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.

Многие полезные функции Multisite можно найти в /wp-includes/ms-functions.php файл. Я настоятельно рекомендую просмотреть проект Trac самостоятельно. Это отличный способ найти новые функции и ознакомиться со стандартами кодирования 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() функции.

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

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

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

Добавьте следующее в вашу тему 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="blog_id . ""' . $class . '>[' . get_bloginfo('name') . '](' . home_url() . ')

           ' . "n"; restore_current_blog(); } $html .= '

           ' . "nn"; return $html; }

(Пожалуйста, обрати внимание: То get_blog_list() функция в настоящее время устарел из-за возможности высокого потребления ресурсов, если сеть содержит более 1000 веб-сайтов. В настоящее время функции замены нет, поэтому я использовал пользовательский $wpdb запрос на своем месте. В будущем разработчики WordPress, вероятно, выпустят лучшую альтернативу. Я предлагаю проверить замену перед реализацией этого примера в реальной сети.)

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

Чтобы использовать это в своей теме, вызовите wp_list_sites() функцию, в которой вы хотите отображать сетевое меню. Поскольку функция сначала проверяет установку с поддержкой нескольких сайтов, вы должны убедиться, что возвращаемое значение не false перед отображением соответствующего HTML.

<?php
// Multisite Network Menu
$network_menu = wp_list_sites();
if( $network_menu ): 
?>

Список последних сообщений по всей сети

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

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

Начните с добавления wp_recent_across_network() функция для вашей темы functions.php файл.

/**
 * List recent posts across a Multisite network
 *
 * @uses get_blog_list(), get_blog_permalink()
 *
 * @param int $size The number of results to retrieve
 * @param int $expires Seconds until the transient cache expires
 * @return object Contains the blog_id, post_id, post_date and post_title
 */
function wp_recent_across_network( $size = 10, $expires = 7200 ) {
   if( !is_multisite() ) return false;

   // Cache the results with the WordPress Transients API
   // Get any existing copy of our transient data
   if ( ( $recent_across_network = get_site_transient( 'recent_across_network' ) ) === false ) {

      // No transient found, regenerate the data and save a new transient
      // Prepare the SQL query with $wpdb
      global $wpdb;

      $base_prefix = $wpdb->get_blog_prefix(0);
      $base_prefix = str_replace( '1_', ’ , $base_prefix );

      // 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_site_transient( 'multisite_site_list' ) ) ) {
         global $wpdb;
         $site_list = $wpdb->get_results( $wpdb->prepare('SELECT * FROM wp_blogs ORDER BY blog_id') );
         set_site_transient( 'multisite_site_list', $site_list, $expires );
      }

      $limit = absint($size);

      // Merge the wp_posts results from all Multisite websites into a single result with MySQL "UNION"
      foreach ( $site_list as $site ) {
         if( $site == $site_list[0] ) {
            $posts_table = $base_prefix . "posts";
         } else {
            $posts_table = $base_prefix . $site->blog_id . "_posts";
         }

         $posts_table = esc_sql( $posts_table );
         $blogs_table = esc_sql( $base_prefix . 'blogs' );

         $query .= "(SELECT $posts_table.ID, $posts_table.post_title, $posts_table.post_date, $blogs_table.blog_id FROM $posts_table, $blogs_tablen";
         $query .= "tWHERE $posts_table.post_type="post"n";
         $query .= "tAND $posts_table.post_status="publish"n";
         $query .= "tAND $blogs_table.blog_id = {$site->blog_id})n";

         if( $site !== end($site_list) ) 
            $query .= "UNIONn";
         else
            $query .= "ORDER BY post_date DESC LIMIT 0, $limit";
      }

      // Sanitize and run the query
      $query = $wpdb->prepare($query);
      $recent_across_network = $wpdb->get_results( $query );

      // Set the Transients cache to expire every two hours
      set_site_transient( 'recent_across_network', $recent_across_network, 60*60*2 );
   }

   // Format the HTML output
   $html="

‘; } $html .= ‘

‘; вернуть $html; }

Использовать эту функцию в вашей теме очень просто. Обязательно проверьте return значение перед выводом HTML, чтобы избежать конфликтов с немногосайтовыми установками.

<?php
// Display recent posts across the entire network
$recent_network_posts = wp_recent_across_network();
if( $recent_network_posts ):
?>

<?php echo $recent_network_posts; ?>
<?php endif; ?>

Получить один пост с другого веб-сайта в сети

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

Например, вы можете захотеть отобразить the_content() со страницы «О нас» на основном веб-сайте в вашей сети.

<?php
// Display "About" page content from the network"s primary website
$about_page = get_blog_post( 1, 317 );
if( $about_page ): 
?>

post_content; ?>

Вы заметили, что весь $post объект возвращается? В этом примере мы использовали только the_content()но гораздо больше информации доступно для других обстоятельств.

Настройка глобальных переменных в сети

Запуск любого проекта WordPress в надежной локальной среде разработки всегда важен. Возможно, вам будет удобно иметь глобальную переменную, которая определяет, является ли веб-сайт «живым» или «постановочным». В Multisite вы можете добиться этого с помощью активируемого по сети подключаемого модуля, который содержит следующую удобную функцию, предполагая, что ваш локальный хост содержит localhost в URL:

/**
 * Define network globals
 */
function ms_define_globals() {
   global $blog_id;
   $GLOBALS['staging'] = ( strstr( $_SERVER['SERVER_NAME'], 'localhost' ) ) ? true : false;
}
add_action( 'init', 'ms_define_globals', 1 );

Когда бы вы использовали это $staging Переменная? Я использую его для отображения сообщений, уведомлений и информации, связанных с разработкой, для улучшения моего рабочего процесса.

Отображение информации о запросе страницы в локальной среде

я использую $staging глобальная переменная для отображения количества запросов и скорости запросов страниц для каждой страницы в сети в моей локальной среде.

/**
 * Display page request info
 *
 * @requires $staging
 */
function wp_page_request_info() {
   global $staging;
   if ( $staging ): ?>
      <?php echo get_num_queries(); ?> queries in <?php timer_stop(1); ?> seconds.
   <?php endif;
}
add_action( 'wp_footer', 'wp_page_request_info', 1000 );

Это только один из многих способов использования ms_define_globals() функция. Я использовал его для определения, поиска и замены URL-адресов в сети доставки контента, для обнаружения мобильных устройств и пользовательских агентов, а также для фильтрации URL-адресов локальных вложений.

Заключение

Простота управления несколькими веб-сайтами в одной установке WordPress имеет огромную ценность. Использование WordPress Multisite быстро становится необходимым навыком среди разработчиков WordPress. Эти методы должны обеспечить вам прочную основу для дальнейшего развития, чтобы вы могли стать следующей рок-звездой темы WordPress Multisite!

Другие источники

  • Освоение серии WordPress Multisite, WPCandy
  • «Создать [Multisite] Сеть», Кодекс WordPress
  • «Поддомены WordPress MultiSite на MAMP», Perishable Press
  • «Миграция нескольких блогов в мультисайт WordPress 3.0», WordPress Codex
  • OpenView Venture Partners, живой пример мультисайтовой сети WordPress
  • «Переходные процессы, кэширование и сложности мультисайтов», Шоу Отто и Насина, WordCamp, Сан-Франциско, 2011 г.
Сокрушительная редакция
(аль)



[ad_2]
Source: https://smashingmagazine.com

Заключение

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

Пожалуйста оцените статью, и напишите комментарий.

Похожие статьи

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

Ваш адрес email не будет опубликован.

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

Название: Мультисайт WordPress: практические функции и методы . Краткое описание: [ad_1] ⭐ Кевин Л . Дата публикации: 19.02.2022 . Автор: Алишер Валеев .

Для чего создан сайт Novosti-Nedeli.ru

Данный сайт посвящен новостям мира и мира технологий . Также тут вы найдете руководства по различным девайсам.

Сколько лет сайту?

Возраст составляет 3 года

Кнопка «Наверх»