Cum pot obține date personalizate din metabox pentru fiecare blog din rețeaua multisite?
Am vrut să creez un component Meniu pe site-ul meu care să afișeze linkuri către diferitele site-uri din rețeaua mea (WordPress Multisite).
Soluția mea a fost să creez un site_option folosind CMB2. Fiecare site va completa acest câmp cu valorile necesare, care apoi vor fi folosite pentru afișarea meniului în header.php al temei. Totuși, primesc doar datele site_option ale site-ului principal/implicit, în ciuda utilizării switch_to_blog().
Iată codul:
$sites = wp_get_sites();
$current_site = get_current_blog_id();
foreach ($sites as $site) {
$detalii = get_blog_details($site['blog_id']);
$zSite = $detalii->blog_id;
$culoareaMea = '';
$clasaMea = '';
if( $current_site == $zSite ) {
$clasaMea = 'activ';
}
switch_to_blog( $site[ 'blog_id' ] );
$culoareaMea = myPrefix_get_option( 'test_colorpicker' ); //aceasta este funcția get_option furnizată de CMB2. Vezi întreaga funcție aici: 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>', $clasaMea , $culoareaMea , 'http://'.$site['domain'].$site['path'], $detalii->blogname );
}
Poate cineva să mă ajute sau să-mi sugereze o soluție diferită pentru a-mi atinge obiectivul?
Pentru cei care vor da peste asta în viitor, acest lucru a fost de fapt răspuns de către autorul CMB2 însuși, 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' ); // aici este codul actualizat
$mycolor = $mycolor['test_colorpicker']; // aici este codul actualizat
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 );
}
Conform lui Michael:
Cred că problema provine din funcția myprefix_admin(), în final. Aceasta creează ceea ce se numește un singleton, ceea ce înseamnă că doar o singură instanță a unui obiect va exista la un moment dat. Este executată imediat, iar orice apel cu myprefix_admin() ulterior va face referire la acel prim obiect. Aceasta include și bucle foreach precum cea pe care încerci să o faci mai sus.
...ceea ce facem este să preluăm întreaga opțiune, și apoi să extragem doar partea de care avem nevoie, în acest caz valoarea selectorului de culori.
Mulțumesc din nou lui Michael Beckwith de la CMB2.
