web-dev-qa-db-ja.com

get_option関数

私は現在自分のテーマを作ろうとしていますが、get_option()関数がどのように機能するのかよくわかりません。

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

..bothは1を返します(ただし、Dreamweaverは2番目のオプションを好みません)。しながら

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.


UPDATE:部分的な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>' : '';
2
Sultenhest

最初の変種であるget_option()の使い方が間違っているので、 get_option()のドキュメント をもう一度見てください。基本的には、関数を使って配列要素に直接アクセスすることはできません。それをサポートしていません。

2番目の方法も可能ですが、少なくともPHP 5.4が必要です。私はdreamweaverについては何も知りません。

どこにいても変数にアクセスできない理由は、変数スコープです。 PHP Manual:Variable scope で読んでください。

私が想像する最も簡単なことはそれを昔ながらのやり方でやることです、あなたが使うことができる関数を作るだけです。このような例:

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;
    }
}
3
Nicolai