it-swarm.com.de

multisite: Globales Menü mit Links zu Netzwerkstandorten?

Kann ich ein einziges Menü erstellen, das

  1. erscheint auf jeder Seite im Netzwerk und

  2. enthält jede Site und Seite, die im Netzwerk vorhanden ist?

Ich spreche über die folgende Struktur:

  • Hauptseite

    • Beispiel Seite 1
    • Muster Seite 2

    • Netzwerkstandort A

      • Musterseite A1
      • Musterseite A2
    • Netzwerkstandort B

      • Musterseite B1

Ist es möglich, ein Menü zu erstellen, das so aussieht?

1
okiedokey

get_sites() ruft eine Liste der Sites in einem Multisite-Netzwerk ab. Sie können dann switch_to_blog() [*], get_posts() / get_pages() und restore_current_blog() [*] verwenden, um die Seiten von den verschiedenen Sites abzurufen.

Es wird dringend empfohlen, die Ergebnisse als Standortoption mit update_site_option() zu speichern, um die Belastung Ihres Servers zu verringern. Sie können wp_cron() einen Job hinzufügen, um Ihre Option regelmäßig zu aktualisieren, oder dem save_post (oder einem oder mehreren geeigneten Post Status Transition - Hooks, z. B. new_to_publish und) eine Aktion hinzufügen draft_to_publish), um Ihre gespeicherte Menüliste zu aktualisieren. Ein zusätzlicher Vorteil, wenn Sie die Menüliste in einer Site-Option behalten, besteht darin, dass Sie von jeder Site in Ihrem Netzwerk mit get_site_option() darauf zugreifen können.


[*] - Als Multisite ursprünglich herauskam, lautete die Terminologie asiteofblogs; später änderte es sich zu anetworkofsites, aber die alten Weisen erscheinen immer noch in Funktionsnamen wie switch_to_blog() und restore_current_blog().

1
Pat J

Wie wäre es mit demMulti-Site Site List ShortcodePlug-in? Ich habe es in einem Text-Widget verwendet und es hat das Menü erstellt, nach dem ich gesucht habe. http://wordpress.org/plugins/multi-site-site-list-shortcode/

0
Aaron

Es gab eine Funktion namens get_blog_list(), die derzeit aufgrund des Potenzials eines hohen Ressourcenverbrauchs veraltet ist, wenn ein Netzwerk über viele Standorte verfügt. Eine bessere und ressourcenschonendere Möglichkeit wäre, die wp_blogs-Tabelle in Ihrer WP -Datenbank mit einer benutzerdefinierten Abfrage abzufragen.

Fügen Sie den folgenden Code zur Datei functions.php Ihres Themas hinzu, und Sie sollten bereit sein, loszulegen.

/**
 * 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;
}
0
ShoutingWords