Come ottenere i dati di metabox personalizzati da ogni blog multisite?

11 set 2015, 10:20:58
Visualizzazioni: 483
Voti: 0

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?

0
Tutte le risposte alla domanda 1
0

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.

11 set 2015 22:42:15