Список сайтов в вашей сети
Очень полезная функция для тех, использует сеть веб сайтов с помощью функции WordPress 3.+ (мультисайт). Вам нужно выводить список всех сайтов в сети?Задача просто решается с помощью следующего кода..
Первым шагом, конечно, нужно добавить функции в файл 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;
}
После сохранения файла, следующий код будет выводить все сайты в вашей сети. Просто скопируйте его в вашу тему туда, где планируете выводить список.
<?php
// Меню сети мультисайта
$network_menu = wp_list_sites();
if( $network_menu ):
?>
<div id="network-menu">
<?php echo $network_menu; ?>
</div>
<!--// end #network-menu -->
<?php endif; ?>
Комментарии:
Нету комментариев для вывода...