web-dev-qa-db-ja.com

テーマのオプションのデフォルト値を設定する方法

$shortname = "nuod";

array( "name" => "Custom Logo URL",
    "desc" => "Enter the link to your site's custom logo.",
    "id" => $shortname."_logo",
    "type" => "text",
    "std" => "newlogo.png")

Stdを<?php echo get_option('nuod_logo'); ?>の値として自動的に設定する方法

3
Zhianc

@Ashfameが既に指摘したように、あなたはデータベースにデフォルトを保存するべきではありません - それはユーザーが選択したオプションのためのものであるべきです(もちろん、デフォルトが選択されたら、それからそれを保存してください)。

しかし、wp_parse_args()も使う必要はありません。 get_optionでは、デフォルト値を選択できます。例えば:

//If nuod_logo is not found, uses 'newlogo.pnp'
$number = get_option('nuod_logo', 'newlogo.png') 

ただし、テーマやプラグインは(必要に応じて)データベース内の1行に格納されている配列にオプションを保持することがよくあります。そう

$my_plugin_options = get_option('my_plugins_options') 

すべてのオプションを返すことが期待されています。そのため、すべてのオプションをデフォルトの配列$my_plugin_defaultsに入れることができます。

$my_plugin_options = get_option('my_plugins_options',$my_plugin_defaults) 

しかし、これは素晴らしいことではありません - 単にコードを複製してバグの余地を残す醜い$my_plugin_defaultsを再宣言する必要があるか、または単に間違っているグローバル変数にする必要があります。解決策は、WordPressの設定APIを基にした独自の 'get_option'を作成することです。

 function wpse28954_get_option( $option_name='' ){

      $defaults = array(
          // Array of defaults: option => default value 
      )
      $options = get_option('my_plugins_options',$defaults);

      //Parse defaults again - see comments
      $options = wp_parse_args( $options, $defaults );

      if( !isset($options[$option_name]) )
           return false;

      return $options[$option_name];

 }

これはwpse28954_get_optionがデフォルト値を定義されたデフォルト値内にない場合にデフォルト値を設定することを許可することによって改善されるかもしれません

これで、デフォルトは管理しやすい場所に保存され、wpse28954_get_option['my-option']を使用して保存された設定またはそれ以外のデフォルト値を返すことができます。


編集する

AS @Ashfame wp_parse_argsを使用してコメントで指摘しているように、保存されていないオプションのサブセットにデフォルトを提供するという利点があります。これを含めるように回答を更新しました。 (これは$defaultsget_optionをかなり冗長にします)。 wp_parse_argsを使うことを最初に示唆した @Ashfame の解決策のための+1。

3
Stephen Harris

これは大部分の人々が正しく理解できない重要なことです。データベースにデフォルトを保存しないでください。この目的のためにはwp_parse_args()を使うべきです。

$defaults = array (
    'logo' => 'http://domain.com/logo.png',
    'do_extra_thing' => false
);

// Parse incomming $args into an array and merge it with $defaults
$options = wp_parse_args( $options, $defaults );

$optionsが空のとき、ちょうどあなたがプラグインをインストールしたように、それはあなたのデータベースに何も書かずにうまくいくことができます。そして、その中にいくつかの値があるとき、足りないものは$defaults配列から来るでしょう。

2
Ashfame