私は、最新バージョンのWordpressのget_theme_mod関数に関して、かなり厄介な問題と思われるものがあります。特定のサーバー(Wordpressのすべての要件を満たしているサーバー)でのみ、関数がデータベースに保存されているのを確認できる保存された値を返しません。ただし、関数にデフォルト値を指定した場合は、常に2番目の引数からデフォルト値が返されます。
サーバーはすべてPHP 5.3以上、および必要なMySQLバージョン以上を実行しているので、ここでは本当に困惑しています。すべての環境はPHPとApacheで、内部にも中間にも何もありません。これは一貫したエラーではないようです、それはこれが起こっているように思われる特定のサーバーでのみです。
私は自分のプロジェクトと問題のあるサーバーでWordpressテーマカスタマイズAPIを利用していますが、次のことに気付いています。
また、テーマオプションのいずれかを上書きしたり、それらが返されないようにしたりする可能性のあるプラグインもインストールもアクティブ化もしていません。私の唯一の結論は、get_option関数が他の場所にあるのと同じように、それが何らかのWebホストレベルキャッシング(おそらくAPC)またはおそらくWordpress自身がオプションをキャッシングすること(私はget_theme_modと思う)に関連するということです。
コードが必要な場合は、必要なものをお知らせください(よくわかりません)。
編集**
呼び出されているget_theme_mod関数の内容に対してvar_dumpを実行したところ、次のようになりました(全部ではなく、かなりの数で実行されました)。コロンの前のラベルは、どんな値が何であるかを示すためのものです。
Texture: string(4) "none"
Background Color: string(0) ""
Theme Color: string(7) "#FF0000"
Body Font: string(0) ""
Heading Font: string(0) ""
欲求不満のために、私は以下のコードも試しました、そして、何も返されません:
$options = get_option("theme_mods_aphrodite");
var_dump($options);
この結果得られる結果はブール値です(false)。
私が試したもう一つのことは、デフォルトのTwenty Twelveテーマカスタマイザを使用してそれがうまくいったということでした、それで私のテーマのどこかで何かオプション行を破壊してそれが機能しないようにすることです。しかし、それを奇妙にしているのは、私が問題としているテーマは、私が試した他のサーバーでもうまく機能するということです。それは、特定の孤立したインシデントのみで、データベーステーブルは完全です。
編集#2 **
以下で示唆されるように、私は私のテーマカスタマイズコードを別のテーマに貼り付けました(それは箱から出してうまくいくのでTwenty Twelveを選びました)そしてそれは私のレジスタコードがカスタマイザを壊しているように見えます。
私は同じ問題を抱えていました。type=option
を使用してからget_option
を使用しても動作しません。
別のオプション項目でテストして動作します。そしてitemの括弧なしでMYTHEMENAME_THEME_OPTION
でテストして配列を取得したので正しい方法だと思います。
だから、この記事を見つけたがそれでも空白の値を得た人のためのちょっとしたヒント..あなたがこのコードを使うとき:
$wp_customize->add_setting('mytheme[mytext]', array(
'default' => 'some value you want default',
'capability' => 'edit_theme_options',
'type' => 'option',
));
$wp_customize->add_control('textControl', array(
'label' => __('LabelText', 'mytheme'),
'section' => 'parameters_thrive',
'settings' => 'mytheme[mytext]', ));
それから仕事を得るためにあなたは個々の値として各設定を使う必要があります、
$wp_customize->add_setting('mytext', array(
'default' => 'some value you want default',
'capability' => 'edit_theme_options',
'type' => 'option',
));
$wp_customize->add_control('textControl', array(
'label' => __('LabelText', 'mytheme'),
'section' => 'parameters_thrive',
'settings' => 'mytext', ));
ここでsetting = myText
は配列ではなく(wasmytheme[mytext]
より前)は単一の項目/値、文字列のようになりました。先に進み、get_option()
関数を使用して、必要な値を使用してください。
私は決してget_theme_modがうまくいかなかった理由を解明しませんでした、しかし私は他の誰かが同様の状況で自分自身を見つけた場合にこの迷惑なバグを解決するために気の利いた小さな修正を見つけました。
あなたはすべての設定をtype => 'option'に変更しなければならなくなり、それからもうget_theme_modを使うことはできず、代わりにget_optionを使う必要があります(私の知る限り)。 get_theme_modをget_optionに置き換えて検索しても問題ありません。それは私のために働きました。
もっと良い方法があれば、これを更新します。
あなたがこのコードを使うならば:
$wp_customize->add_setting('mytheme[mytext]', array(
'default' => 'some value you want default',
'capability' => 'edit_theme_options',
'type' => 'option',
));
$wp_customize->add_control('textControl', array(
'label' => __('LabelText', 'mytheme'),
'section' => 'parameters_thrive',
'settings' => 'mytheme[mytext]', ));
get_option('mytheme')['mytext']
を実行するだけで値を取得できます