Come ottenere i dati di metabox personalizzati da ogni blog multisite?
Volevo creare un componente Menu nel mio sito che mostrasse i link ai diversi siti della mia rete (WordPress Multisite).
La mia soluzione è stata creare un site_option utilizzando CMB2. Ogni sito avrebbe riempito questa opzione con i valori necessari che poi sarebbero stati usati per il menu da visualizzare nell'header.php del tema. Tuttavia, ottengo solo i dati del sito principale/predefinito nonostante l'uso di switch_to_blog().
Ecco il codice:
$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' ); //questa è la funzione get option fornita da CMB2. Vedi la funzione completa qui: https://github.com/WebDevStudios/CMB2-Snippet-Library/blob/master/options-and-settings-pages/theme-options-cmb.php
restore_current_blog();
printf( '<li role="presentation" class="%s"><a style="border-color:%s" href="%s">%s</a></li>', $mclass , $mycolor , 'http://'.$site['domain'].$site['path'], $details->blogname );
}
Qualcuno può aiutarmi o magari indicarmi una soluzione diversa per raggiungere il mio obiettivo?
Per chi si imbatterà in questo articolo in futuro, la risposta è stata fornita dall'autore stesso di CMB2, Michael Beckwith:
$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' ); // qui è il codice aggiornato
$mycolor = $mycolor['test_colorpicker']; // qui è il codice aggiornato
restore_current_blog();
printf( '<li role="presentation" class="%s"><a style="border-color:%s" href="%s">%s</a></li>', $mclass , $mycolor , 'http://'.$site['domain'].$site['path'], $details->blogname );
}
Secondo Michael:
Credo che il problema derivi dalla funzione myprefix_admin(), in definitiva. Sta creando quello che è noto come singleton, il che significa che solo un'istanza di un oggetto esisterà in un dato momento. Viene eseguita immediatamente, e ogni volta che fai una chiamata con myprefix_admin() successivamente farà riferimento a quel primo oggetto. Questo include all'interno di cicli foreach come quello che stai cercando di fare sopra.
...quello che facciamo è semplicemente recuperare l'intera opzione, e poi estrarre solo la parte di cui abbiamo bisogno, in questo caso il valore del selettore colore.
Grazie ancora a Michael Beckwith di CMB2.
