Wie bekomme ich benutzerdefinierte Metabox-Daten von jedem Blog mit mehreren Standorten?

Ich wollte auf meiner Website eine Menükomponente erstellen, die Links zu den verschiedenen Websites in meinem Netzwerk (WordPress Multisite) enthält.

Meine Lösung war, eine Site_Option mit CMB2 zu erstellen. Jede Seite wird diese mit den notwendigen Werten füllen, die dann für das Menü verwendet werden, das in der header.php des Themas angezeigt wird. Allerdings erhalte ich nur die site_option-Daten der Haupt- / Standardseite, obwohl switch_to_blog () verwendet wird.

Hier ist der Code:

$sites = wp_get_sites(); $current_site = get_current_blog_id(); foreach ($sites as $site) { $details = get_blog_details($site['blog_id']); $zSite = $details->blog_id; $mycolor = ''; $mclass = ''; if( $current_site == $zSite ) { $mclass = 'active'; } switch_to_blog( $site[ 'blog_id' ] ); $mycolor = myPrefix_get_option( 'test_colorpicker' ); //this is the get option function provided by CMB2. See the whole function here: https://github.com/WebDevStudios/CMB2-Snippet-Library/blob/master/options-and-settings-pages/theme-options-cmb.php restore_current_blog(); printf( '', $mclass , $mycolor , 'http://'.$site['domain'].$site['path'], $details->blogname ); } 

Kann mir jemand helfen oder mich auf eine andere Lösung hinweisen, um mein Ziel zu erreichen?

Solutions Collecting From Web of "Wie bekomme ich benutzerdefinierte Metabox-Daten von jedem Blog mit mehreren Standorten?"

Für diejenigen, die in Zukunft darüber stolpern, wurde dies vom CMB2- Autor selbst, Michael Beckwith, beantwortet:

 $sites = wp_get_sites(); $current_site = get_current_blog_id(); foreach ($sites as $site) { $details = get_blog_details($site['blog_id']); $zSite = $details->blog_id; $mycolor = ''; $mclass = ''; if( $current_site == $zSite ) { $mclass = 'active'; } switch_to_blog( $site[ 'blog_id' ] ); $mycolor = get_option( 'myprefix_options' ); // here's the updated code $mycolor = $mycolor['test_colorpicker']; // here's the updated code restore_current_blog(); printf( '', $mclass , $mycolor , 'http://'.$site['domain'].$site['path'], $details->blogname ); } 

Laut Michael:

Ich glaube, dass das Problem am Ende von der function myprefix_admin () herrührt. Es wird ein sogenanntes Singleton erstellt, was bedeutet, dass nur eine Instanz eines Objekts zu einer bestimmten Zeit existiert. Es wird sofort ausgeführt, und jedes Mal, wenn Sie mit myprefix_admin () einen Aufruf ausführen, wird dieses erste Objekt referenziert. Dies beinhaltet interne Foreach-Loops wie das, was Sie oben versuchen.

… was wir tun, ist einfach die gesamte Option zu holen und dann nur den Teil herauszupicken, den wir brauchen, in diesem Fall den Color-Picker-Wert.

Nochmals vielen Dank Michael Beckwith von CMB2.