web-dev-qa-db-ja.com

テーマファイル内の関数を介してウィジェットを呼び出す(ハードコード)

最後に私は自分のウィジェットを書き終えました。そして今度はテーマphpファイルの中の関数を使ってそれを呼びたいです。私のウィジェットはこんな感じです:

関数reg_custom_widget(){
 register_widget( 'wp_custom_widget'); 
}クラスwp_custom_widgetはWP_Widgetを拡張します{
関数wp_custom_widget(){/ *コンストラクタ* /} 
関数ウィジェット($ args、$ instance){/ *これは、結果を構築して表示するために 'core'関数を使うコードです* /} 
 function shortcode_handler( $ atts){/ * 2つの機能を持つwidget()と同じコード* /} 
 
/*これは基本的な関数で、強く関連しています。メインのウィジェット機能を実行します*/
関数core_func_one($ input){} 
関数core_func_two($ input){} 
関数core_func_three($ input){} 
 core_func_four($ input){} 
 function core_func_five($ input){} 
 
 function update($ new_instance、$ old_instance){/ *設定の更新* /} [ function form($ instance){/ *ウィジェット作成setup-form * /} 
} 

私はすでにウィジェットを呼び出す以下のメソッドについて知っていて、テーマファイルに配置することができます。
1do_shortcode() wp関数を使ってショートコードで呼び出す。
2the_widget() wp関数でウィジェットを呼び出す。
この方法はどちらもうまくいきますが、私のデザイナーはそれらを拒否します。
彼はこのようにしてウィジェットの呼び出しをハードコーディングしたいと思います:if(function_exists('custom_widget')) { custom_widget(); }

どうすればこのオプションを実現できますか?たぶん、ウィジェットクラスの中に別の1つの関数を作り、それをグローバルか何かにするのが合理的かもしれません、それはそれの中からウィジェットを走らせるでしょうか?せん妄のように聞こえますが、この問題を解決する方法を今はわかりません。

1
drake2300

テンプレートファイル内の任意のウィジェットを「ハードコード」するには、the_widget()を使用するのが正しい方法です。

<?php the_widget( 'foobar_widget', $instance, $args ); ?>

'foobar_widget'が登録済みウィジェットではない場合、the_widget()は単純に戻るので、if ( function_exists( $function ) )条件を使用することと機能的に同等です。

the_widget()'foobar_widget'が登録済みウィジェットであることを検証する方法を確認するには、 コアを調べてくださいif ! is_a( $widget_obj, 'foobar_widget' ) ))。しかし、本当に、なぜ迷惑なのですか? the_widget()を呼び出すだけです。それこそが目的です。

2
Chip Bennett