1. 1. WordPressテーマカスタマイザーの概要
  2. 2. WordPressテーマカスタマイザーの操作
  3. 3. WordPressテーマカスタマイザボイラープレート
  4. 4. WordPressテーマカスタマイザボイラープレートの拡張
  5. 5. 現在読んでいる: テーマカスタマイザのボイラープレート–条件付きオプション、子テーマおよびプラグイン

これまでのところ、テーマカスタマイザのボイラープレートとそのフックを使用してテーマオプションを処理することがいかに簡単かを見てきました。おそらく覚えているでしょうが、最も重要なステップは 「thsp_cbp_options_array」 フィルターフックとテーマに使用するオプションの配列を渡します.


WordPressのアクションとフィルターフック-プラグインAPI-とそれらがどのように機能するかについては、すでにご存じだと思いますが、念のため簡単にまとめておきます(例としてフィルターフックを使用)。カスタム関数を定義し、add_filter関数を使用して既存のフィルターにフックできます。

add_filter($ tag、$ function_to_add、$ priority、$ accepted_args);

優先的な議論に焦点を当てましょう。デフォルト値は10であるため、別の数値を使用しない場合は、それが関数の実行優先度になります。数値を小さくすると、関数が早く実行されます。したがって、次のようなことをすると:

//最初のメッセージを追加します
function my_theme_add_first_message($ content){
$ content。= '

最初のメッセージ

'; $ contentを返します。 } add_filter( 'the_content'、 'my_theme_add_first_message'、1); // 2番目のメッセージを追加します function my_theme_add_second_message($ content){ $ content。= '

2番目のメッセージ

'; $ contentを返します。 } add_filter( 'the_content'、 'my_theme_add_second_message'、2);

single.phpまたはその他のテンプレートでthe_content関数を呼び出すと、投稿コンテンツが表示され、その後に最初のメッセージ、2番目のメッセージが表示されます。これはこのコードスニペットでの順序ではなく、実行優先度パラメーターのためです。フックは、雪だるまが丘を転がり落ちて、あらゆる種類のものを拾っているようなものです。.

これはテーマカスタマイザのボイラープレートにどのように適用されますか?

あなたはフックすることができます 「thsp_cbp_options_array」 優先度の値が1に設定されたカスタム関数(my_theme_options_arrayなど)を使用して、テーマのfunction.phpファイルから 「thsp_cbp_options_array」 フィルターフックは、既に定義したmy_theme_options_array関数の後で実行します。この例を見てください:

function my_theme_options_array(){
//ヘルパー関数を使用してデフォルトの必要な機能を取得します
$ thsp_cbp_capability = thsp_cbp_capability();

$ options = array(
//セクションID
'my_theme_new_section' => array(

'existing_section' => false,
'args' => array(
'title' => __( '新しいセクション'、 'my_theme_textdomain'),
「優先度」=> 10
),
'フィールド' => array(
/ *
*ラジオフィールド
* /
'my_radio_button' => array(
'setting_args' => array(
'デフォルト' => 'オプション-2',
'タイプ' => 'オプション',
'機能' => $ thsp_cbp_capability,
'transport' => 'refresh',
),
'control_args' => array(
'label' => __( 'My Radio Button'、 'my_theme_textdomain'),
'type' => 'radio'、//ラジオコントロール
'選択肢' => array(
'option-1' => array(
'ラベル' => __( 'オプション1'、 'my_theme_textdomain')
),
'option-2' => array(
'ラベル' => __( 'オプション2'、 'my_theme_textdomain')
),
'option-3' => array(
'ラベル' => __( 'オプション3'、 'my_theme_textdomain')
)
),
'優先度' => 3
)
)
)
)
);

$ optionsを返します。
}
add_filter( 'thsp_cbp_options_array'、 'my_theme_options_array'、1);

これにより、My Radio Buttonというフィールドが1つあるテーマカスタマイザに新しいセクションが追加されます。次に、あなたまたは他の誰かがあなたのテーマの子テーマを開発し、新しいセクションを保持することにしましたが、私のラジオボタンの代わりに、私のチェックボックスを使用する方が良い場合があります。簡単:

function my_child_theme_options_array($ options){
//ヘルパー関数を使用してデフォルトの必要な機能を取得します
$ thsp_cbp_capability = thsp_cbp_capability();

/ *
*今回は、$ options配列のmy_theme_new_sectionのフィールドのみを編集しています
* /
$ options ['my_theme_new_section'] ['fields'] = array(
'my_checkbox_field' => array(
'setting_args' => array(
'デフォルト' => true,
'タイプ' => 'オプション',
'機能' => $ thsp_cbp_capability,
'transport' => 'refresh',
),
'control_args' => array(
'label' => __( 'My Checkbox'、 'my_theme_textdomain'),
'type' => 'checkbox'、//チェックボックスフィールドコントロール
'優先度' => 2
)
)
);

$ optionsを返します。
}
add_filter( 'thsp_cbp_options_array'、 'my_child_theme_options_array'、2);

$ optionsパラメータをmy_theme_options_arrayに渡さず、my_child_theme_options_array関数で渡したことに気付きましたか?それは私が最初に夢中になったときからです 「thsp_cbp_options_array」 フックテーマカスタマイザのボイラープレートサンプルオプションをオーバーライドしたかった。次に、子テーマから再びそれにフックしたとき、親テーマのオプションを完全に削除するのではなく、少しだけ編集しました。そのため、$ options配列全体ではなく、$ options [‘my_theme_new_section’] [‘fields’]のみをいじっています.

もちろん、フックすることもできます 「thsp_cbp_options_array」 親テーマからのフィルターフックを複数回実行します。たとえば、テーマにプラグインテリトリー機能を追加せず、プラグインに本来の機能を実行させることを選択したとします。次に、特定のプラグインがアクティブな場合にのみ、テーマカスタマイザのオプションをいくつか表示する必要があります。繰り返しますが、簡単です:

function my_plugin_dependency_options_array($ options){
//ヘルパー関数を使用してデフォルトの必要な機能を取得します
$ thsp_cbp_capability = thsp_cbp_capability();

/ *
* 'test-plugin.php'がアクティブな場合のみmy_plugin_dependency_sectionを追加
* /
if(is_plugin_active( 'test-plugin / test-plugin.php')){

$ options ['my_plugin_dependency_section'] = array(
'existing_section' => false,
'args' => array(
'title' => __( 'プラグインの依存関係'、 'my_theme_textdomain'),
「優先度」=> 10
),
'フィールド' => array(
/ *
* テキストフィールド
* /
//フィールドID
'new_text_field' => array(
'setting_args' => array(
'default' => __( ''、 'my_theme_textdomain'),
'タイプ' => 'オプション',
'機能' => $ thsp_cbp_capability,
'transport' => 'refresh',
),
'control_args' => array(
'ラベル' => __( 'のみ表示'、 'my_theme_textdomain'),
'type' => 'text'、//テキストフィールドコントロール
「優先度」=> 5
)
),
)
);

}

$ optionsを返します。
}
add_filter( 'thsp_cbp_options_array'、 'my_plugin_dependency_options_array'、3);

開発したい コア機能プラグイン (必要に応じて)テーマで使用しますか?あなたはフックすることができます 「thsp_cbp_options_array」 プラグインのファイルの1つからも、テーマのfunction.phpファイルから行うのと同じ方法で.

Option Crazyを使用しないでください

開発するテーマにオプションを追加するたびに、WordPressのコア原則の1つを維持する必要があります— オプションではない決定 – 念頭に置いて。簡単に夢中になって、テーマの細かいディテールごとにユーザーオプションを追加し始めるのは簡単ですが、それは誰にも有利なことではありません。これらのいくつかのトリック、特にプラグインに依存するオプションを追加すると、テーマのオプションをできるだけ低く保つのに役立つことを願っています.

結局のところ、テーマにすべての要素のすべてのボーダー半径などのオプションがある場合、それはテーマではなく、WYSIWYGエディターであり、おそらく素晴らしいものではありません.

白いシャツを購入しないのは、いくらかの努力でそれをテーブルクロスに変形できるからです。「白いシャツ」が好きなので購入します。 WordPressのテーマもそうである必要があります。考えられるすべての方法ですべてを実行しようとするのではなく、特定の方法でコンテンツを提示する必要があります。テーマ開発者は、ユーザーの期待が本来あるべきものであることを確認するのが仕事です.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me