Сети сайтов — действительно замечательная фича, представленная в 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; ?>