Funcția get_option în WordPress - Cum să obții corect opțiunile temei

27 feb. 2015, 23:16:14
Vizualizări: 17K
Voturi: 4

Încerc să-mi creez propria temă WordPress, dar nu sunt sigur cum funcționează corect funcția get_option(). De exemplu, cum se face că acestea...

echo get_option('show_header', 'sultenhest_theme_display_options');
echo get_option('sultenhest_theme_display_options')['show_header'];

...returnează ambele valoarea 1 (dar Dreamweaver nu prea apreciază a doua variantă). În timp ce...

echo get_option('twitter', 'sultenhest_theme_social_options');

...returnează simplu 'sultenhest_theme_social_options', ceea ce este incorect.

O opțiune ar fi să definesc array-ul astfel:

$social_options = get_option( 'sultenhest_theme_social_options' );

și să-l apelez astfel:

echo $social_options['twitter'];

Returnează șirul corect, dar funcționează doar în header.php (dacă array-ul este definit acolo) și nu în, de exemplu, footer.php.


ACTUALIZARE: Urmând parțial sfaturile lui ialocin și Brad Dalton, am ajuns la această soluție care funcționează perfect:

function sultenhest($option, $arg){
  $the_array = array();
  foreach( get_option('sultenhest_theme_'.$option) as $key => $item ){
    $the_array[$key] = $item;
  }
  return $the_array[$arg];
}

și o apelez astfel:

echo sultenhest('social_options', 'twitter') ? '<a href="' . sultenhest('social_options', 'twitter') . '">Twitter</a>' : '';
0
Toate răspunsurile la întrebare 1
1

Folosești get_option() greșit, prima variantă, așa că aruncă o privire din nou la documentația get_option(). Practic, nu poți accesa direct un element de matrice cu funcția, pur și simplu nu suportă acest lucru.

A doua variantă ar trebui să fie posibilă, dar ai nevoie de cel puțin PHP 5.4 - dacă nu mă înșel total; nu știu nimic despre Dreamweaver.

Motivul pentru care nu poți accesa variabila oriunde dorești este domeniul de aplicare al variabilei, citește mai multe despre acest lucru în Manualul PHP: Domeniul de aplicare al variabilelor.

Cea mai simplă soluție pe care mi-o imaginez este să o faci în modul vechi, pur și simplu să creezi o funcție pe care o poți folosi. Exemplu:

function wpse_179693_echo_my_options_array_value() {
    $social_options = get_option( 'sultenhest_theme_social_options' );
    if ( isset( $social_options['twitter'] ) ) {
        echo $social_options['twitter'];
    } else {
        return FALSE;
    }
}
27 feb. 2015 23:29:32
Comentarii

get_option('some_option')['some_key'] funcționează de fapt în PHP 5.4, acest lucru se numește dereferențiere de array.

Milo Milo
28 feb. 2015 01:00:50