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

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

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

1/**
2 * Создаем список всех сайтов в сети
3 */
4function wp_list_sites( $expires = 7200 ) {
5   if( !is_multisite() ) return false;
6 
7   // В виду того, что функция get_blog_list() в настоящее время считается устаревшей
8   // из-за высокого потребления ресурсов сайта, мы будем использовать
9   // $wpdb для нашего SQL-запроса. Поскольку запрос может слишком интенсивно использовать
10   // память, мы будем сохранять результаты, используя Transients API
11   if ( false === ( $site_list = get_transient( 'multisite_site_list' ) ) ) {
12      global $wpdb;
13      $site_list = $wpdb->get_results( $wpdb->prepare('SELECT * FROM wp_blogs ORDER BY blog_id') );
14      // Устанавливаем срок истечения кеша Transient каждые два часа
15      set_site_transient( 'multisite_site_list', $site_list, $expires );
16   }
17 
18   $current_site_url = get_site_url( get_current_blog_id() );
19 
20   $html = '
21<ul id="network-menu">' . "\n";
22 
23   foreach ( $site_list as $site ) {
24      switch_to_blog( $site->blog_id );
25      $class = ( home_url() == $current_site_url ) ? ' class="current-site-item"' : '';
26      $html .= "\t" . '
27<li id="site-' . $site->blog_id . '" '="" .="" $class=""><a href="' . home_url() . '">' . get_bloginfo('name') . '</a></li>
28 
29' . "\n";
30      restore_current_blog();
31   }
32 
33   $html .= '</ul>
34 
35<!--// end #network-menu -->' . "\n\n";
36 
37   return $html;
38}

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

1<?php
2// Multisite Network Menu
3$network_menu = wp_list_sites();
4if( $network_menu ):
5?>
6<div id="network-menu">
7   <?php echo $network_menu; ?>
8</div>
9 
10<!--// end #network-menu -->
11<?php endif; ?>
VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)

Об авторе ADv

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