Как создать меню навигации по сети сайтов

Сети сайтов — действительно замечательная фича, представленная в WP 3.0+. В этой статье мы научимся создавать меню навигации по этой самой сети, где будут выведены все сайты, находящиеся в вашей сети.

Прежде всего нам необходимо создать функцию. Скопируйте и вставьте следующий код в файл functions.php вашей темы:

/**
 * Создаем список всех сайтов в сети
 */
function wp_list_sites( $expires = 7200 ) {
   if( !is_multisite() ) return false;

   // В виду того, что функция get_blog_list() в настоящее время считается устаревшей
   // из-за высокого потребления ресурсов сайта, мы будем использовать
   // $wpdb для нашего SQL-запроса. Поскольку запрос может слишком интенсивно использовать
   // память, мы будем сохранять результаты, используя 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') );
      // Устанавливаем срок истечения кеша Transient каждые два часа
      set_site_transient( 'multisite_site_list', $site_list, $expires );
   }

   $current_site_url = get_site_url( get_current_blog_id() );

   $html = '
<ul id="network-menu">' . "\n";

   foreach ( $site_list as $site ) {
      switch_to_blog( $site->blog_id );
      $class = ( home_url() == $current_site_url ) ? ' class="current-site-item"' : '';
      $html .= "\t" . '
<li id="site-' . $site->blog_id . '" '="" .="" $class=""><a href="' . home_url() . '">' . get_bloginfo('name') . '</a></li>

' . "\n";
      restore_current_blog();
   }

   $html .= '</ul>

<!--// end #network-menu -->' . "\n\n";

   return $html;
}

После этого можно использовать функцию wp_list_sites() в файлах вашей темы. Пример ниже показывает как работает функция:

<?php
// Multisite Network Menu
$network_menu = wp_list_sites();
if( $network_menu ):
?>
<div id="network-menu">
   <?php echo $network_menu; ?>
</div>

<!--// end #network-menu -->
<?php endif; ?>
VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
Scroll To Top