ネットワーク内のすべてのブログを1ページにまとめて表示できますか。
はい、テンプレートの小さなソースです。
<ul class='postlist no-mp'>
<?php
/**
* Old version, change on 07/23/2013
*
$blogs = $wpdb->get_results(
"SELECT blog_id,path FROM {$wpdb->blogs}
WHERE blog_id != {$wpdb->blogid}
AND site_id = '{$wpdb->siteid}'
AND spam = '0'
AND deleted = '0'
AND archived = '0'
order by blog_id", ARRAY_A
);
*/
// get all blogs
$blogs = get_blog_list( 0, 'all' );
if ( 0 < count( $blogs ) ) :
foreach( $blogs as $blog ) :
switch_to_blog( $blog[ 'blog_id' ] );
if ( get_theme_mod( 'show_in_home', 'on' ) !== 'on' ) {
continue;
}
$description = get_bloginfo( 'description' );
$blog_details = get_blog_details( $blog[ 'blog_id' ] );
?>
<li class="no-mp">
<h2 class="no-mp blog_title">
<a href="<?php echo $blog_details->path ?>">
<?php echo $blog_details->blogname; ?>
</a>
</h2>
<div class="blog_description">
<?php echo $description; ?>
</div>
<?php
query_posts( 'showposts=5' );
if ( have_posts() ) :
while( have_posts() ) :
the_post();
?>
<div class="blog_post">
<div class="post_title">
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</div>
<div class="post_excerpt">
<?php the_excerpt(); ?>
</div>
</div>
<?php endwhile; ?>
<?php endif;
restore_current_blog();
?>
</li>
<?php endforeach;
endif; ?>
</ul>
これにより、マルチサイトネットワーク内のすべてのパブリックサイトの番号なしリストが印刷されます。
// $bcount = get_blog_count();
global $wpdb;
$blogs = $wpdb->get_results("SELECT * FROM $wpdb->blogs WHERE spam = '0' AND deleted = '0' and archived = '0' and public='1'");
if(!empty($blogs)){
?><ul class="menu"><?php
foreach($blogs as $blog){
$details = get_blog_details($blog->blog_id);
if($details != false){
$addr = $details->siteurl;
$name = $details->blogname;
if(!(($blog->blog_id == 1)&&($show_main != 1))){
?>
<li class="menu-item<?php if($counter == get_current_blog_id()){ echo ' current-menu-item';}?>">
<a href="<?php echo $addr; ?>"><?php echo $name;?></a>
</li>
<?php
}
}
}
?></ul><?php
}
WordPress 4.6.0以降、私はあなたに "リスト"(またはそれ以上)をより現代的な方法で提供します。
<?php $sites_q = new \WP_Site_Query( [
'site__not_in' => get_main_site_for_network(),
] );
$sites_for_network = $sites_q->get_sites();
if ( ! empty( $sites_for_network ) ) {
$original_site_id = get_current_blog_id();
foreach ( $sites_for_network as $site ) {
/** @var $site \WP_Site */
switch_to_blog( $site->blog_id );
// Do stuff with the site
}
switch_to_blog( $original_site_id );
}
これは Tom J Nowell アイデアと答えに基づいて書かれた解決策です。 Wordpress Multisiteインストールの全サイトのソートされたリストを単純な行として(パイプで区切って)印刷します。
このソリューションを実行するには、現在選択されているテーマを編集して、右側のサイドバーからshortcodes.php
を選択します。このファイルの終わり近くで、最初にadd_shortcode
呼び出しが発生する前に、次の関数を追加します。
function theme_list_all_network_sites()
{
global $wpdb;
$result = '';
$sites = array();
$blogs = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->blogs WHERE spam = '0' AND deleted = '0' and archived = '0' and public='1'"));
if(!empty($blogs))
{
foreach($blogs as $blog)
{
$details = get_blog_details($blog->blog_id);
if($details != false)
{
$url = $details->siteurl;
$name = $details->blogname;
if(!(($blog->blog_id == 1) && ($show_main != 1)))
{
$sites[$name] = $url;
}
}
}
ksort($sites);
$count = count($sites);
$current = 1;
foreach($sites as $name=>$url)
{
$result.= '<a href="'.$url.'">'.$name.'</a>';
$result.= ($current == $count) ? "\n" : ' | ';
++$current;
}
}
return $result;
}
それからファイルの最後までスクロールし、最後にadd_shortcode
addを実行した後に:
add_shortcode('network_list', 'theme_list_all_network_sites');
変更を保存するにはUpdate File
をクリックします。
今、誰かが投稿、ページまたはテーマ要素に[network_list]
ショートコードを使うときはいつでも、ネットワークサイトのリストはそのショートコードの代わりに印刷されるでしょう。