Функция get_option в WordPress

27 февр. 2015 г., 23:16:14
Просмотры: 17K
Голосов: 4

Я пытаюсь создать свою собственную тему, но не совсем понимаю, как работает функция get_option(), потому что вот такой код..

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

..оба варианта возвращают 1 (но Dreamweaver не нравится второй вариант). В то время как

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

..просто возвращает 'sultenhest_theme_social_options', что неверно.

Один из вариантов - определить массив таким образом

$social_options = get_option( 'sultenhest_theme_social_options' );

и вызывать его так

echo $social_options['twitter'];

Это возвращает правильную строку, но работает только в файле header.php (если массив определен там) и не работает, например, в footer.php.


ОБНОВЛЕНИЕ: Частично следуя советам ialocin и Brad Dalton, я пришел к такому решению, которое отлично работает:

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

и вывод данных осуществляется так:

echo sultenhest('social_options', 'twitter') ? '<a href="' . sultenhest('social_options', 'twitter') . '">Twitter</a>' : '';
0
Все ответы на вопрос 1
1

Вы используете get_option() неправильно, первый вариант, поэтому взгляните еще раз на документацию get_option(). По сути, вы не можете напрямую обращаться к элементу массива с помощью этой функции, она просто не поддерживает это.

Второй вариант должен работать, но вам потребуется как минимум PHP 5.4 — если я не ошибаюсь; я ничего не знаю о dreamweaver.

Причина, по которой вы не можете получить доступ к переменной везде, где хотите, — это область видимости переменных, прочитайте об этом в Руководстве PHP: Область видимости переменных.

Самое простое решение, которое я могу предложить, — сделать это по-старому, просто создать функцию, которую можно использовать. Например, вот так:

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 февр. 2015 г. 23:29:32
Комментарии

get_option('some_option')['some_key'] действительно работает в PHP 5.4, это называется разыменование массива.

Milo Milo
28 февр. 2015 г. 01:00:50