Función get_option en WordPress

27 feb 2015, 23:16:14
Vistas: 17K
Votos: 4

Actualmente estoy tratando de crear mi propio tema, pero no estoy muy seguro de cómo funciona la función get_option(), porque ¿cómo es que esto..

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

...ambos retornan 1 (pero a Dreamweaver no le gusta la segunda opción). Mientras que

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

...simplemente retorna 'sultenhest_theme_social_options', lo cual es incorrecto.

Una opción sería definir el array así:

$social_options = get_option( 'sultenhest_theme_social_options' );

y llamarlo así:

echo $social_options['twitter'];

Retorna el string correcto, pero solo funciona en el archivo header.php (si el array está definido allí) y no en, por ejemplo, footer.php.


ACTUALIZACIÓN: Siguiendo en parte a ialocin y Brad Dalton llegué a esta solución, que funciona perfectamente:

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

y mostrarlo así:

echo sultenhest('social_options', 'twitter') ? '<a href="' . sultenhest('social_options', 'twitter') . '">Twitter</a>' : '';
0
Todas las respuestas a la pregunta 1
1

Estás usando get_option() incorrectamente en la primera variante, así que revisa nuevamente la documentación de get_option(). Básicamente no puedes acceder directamente a un elemento de array con la función, simplemente no lo soporta.

La segunda variante debería ser posible, pero necesitas al menos PHP 5.4 - si no estoy totalmente equivocado; no sé nada sobre Dreamweaver.

La razón por la que no puedes acceder a la variable en cualquier lugar es el alcance de las variables (variable scope), puedes leer sobre esto en el Manual de PHP: Alcance de variables.

Lo más fácil que imagino es hacerlo a la vieja usanza, simplemente crea una función que puedas usar. Por ejemplo así:

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
Comentarios

get_option('some_option')['some_key'] realmente funciona en php 5.4, se llama desreferenciación de arrays.

Milo Milo
28 feb 2015 01:00:50