一つのメニューを作成できますか
ネットワーク内のすべてのページに表示され、
ネットワーク内に存在するすべてのサイトとページが含まれていますか?
私は次のような構造について話しています。
メインサイト
サンプルページ2
ネットワークサイトA
ネットワークサイトB
このようなメニューを作成することは可能ですか?
get_sites()
は、マルチサイトネットワーク内のサイトのリストを取得します。その後、 switch_to_blog()
[*]、 get_posts()
/ get_pages()
、および restore_current_blog()
を使用できます。 [*]さまざまなサイトからページを取得します。
サーバーの負荷を軽減するために、 update_site_option()
を使用して結果をサイト全体のオプションとして保存することを強くお勧めします。 wp_cron()
にジョブを追加してオプションを定期的に更新するか、 save_post
(または1つ以上の適切な new_to_publish
やdraft_to_publish
などのステータス遷移 フックを保存して、保存されているメニューリストを更新します。サイトオプションにメニューリストを保持することの追加の利点は、 get_site_option()
を使用してネットワーク内の任意のサイトからメニューリストにアクセスできることです。
[*]-マルチサイトが最初に登場したとき、用語はasiteofblogs;後でanetworkofsites、ただし、古い方法はswitch_to_blog()
やrestore_current_blog()
などの関数名に引き続き表示されます。
マルチサイトサイトリストショートコードプラグインはどうですか。私はそれをテキストウィジェットの中で使っていて、それが私がしていたメニューを作りました。 http://wordpress.org/plugins/multi-site-site-list-shortcode/
get_blog_list()
と呼ばれる関数がありました。これは、ネットワークにたくさんのサイトがある場合、リソースが大量に消費される可能性があるため、現在は非推奨です。カスタムクエリを使用して、WPデータベース内のwp_blogs
テーブルにクエリを実行するのが、リソースをあまり必要としない方法です。
あなたのテーマのfunctions.phpファイルに次のコードを追加してください。
/**
* Build a list of all websites in a network
*/
function wp_list_sites( $expires = 7200 ) {
if( !is_multisite() ) return false;
// Because the get_blog_list() function is currently flagged as deprecated
// due to the potential for high consumption of resources, we'll use
// $wpdb to roll out our own SQL query instead. Because the query can be
// memory-intensive, we'll store the results using the 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') );
// Set the Transient cache to expire every two hours
set_site_transient( 'multisite_site_list', $site_list, $expires );
}
$current_site_url = get_site_url( get_current_blog_id() );
$html = '' . "n";
foreach ( $site_list as $site ) {
switch_to_blog( $site->blog_id );
$class = ( home_url() == $current_site_url ) ? ' class="current-site-item"' : '';
$html .= "t" . 'blog_id . '"' . $class . '>' . get_bloginfo('name') . '' . "n";
restore_current_blog();
}
$html .= '' . "nn";
return $html;
}