DevinVinsonによる WordPress Plugin Boilerplateを使用してプラグインを作成しています 。
1つ以外はすべてうまくいきます。
私は、ショートコードがページにあるときだけ、スクリプトとcssをエンキューしようとしています。
define_public_hooks
関数に、スクリプトを登録する代わりに、スクリプトを登録するためのローダーへの呼び出しを追加しました。
private function define_public_hooks() {
// ...
$this->loader->add_action( 'wp_register_script', $plugin_public, 'register_styles' );
$this->loader->add_action( 'wp_register_script', $plugin_public, 'register_scripts' );
// ...
}
それからclass-my-plugin-public.php
ファイルに2つのパブリック関数register_styles()
とregister_scripts()
を作成しました。これらの関数の中では、それらをエンキューする代わりに、スクリプトとスタイルを登録するだけです。これは基本的なことです。
public function register_scripts() {
wp_register_script( $this->plugin_name . '_google_maps_api', '//maps.googleapis.com/maps/api/js?key='. $gmap_key .'&v=3&libraries=places', array( 'jquery' ), '3', true );
}
それから私はそれらをshortcode return関数に入れたいのですが、それらはまったく登録されません。
wp_script_is( $this->plugin_name . '_google_maps_api', 'registered' )
で確認したところ、false
が返されました。
enqueue
の代わりにregister
を使っても同じことをすれば、すべてうまくいきます。
何かアイディアは?
あなたは wp_enqueue_scripts
actionフックを使う必要があります。あなたはwp_register_script
をアクションフックとして使いましたが、WordPressコアにはwp_register_script
という名前のアクションフックはありません。
これが愚かな間違いであれば、あなたはすでに答えを持っています。このトピックに関する詳細情報が必要な場合はお読みください。
wp_enqueue_scripts
action hook )にコールバック関数をつけることはあなたのスクリプトやスタイルがエンキューされることを意味するのではなく、単に コールバック関数 を実行したい時を意味します。
元の登録とエンキューは、 hook ではなく)wp_register_script()
、wp_register_style
、wp_enqueue_script()
、wp_enqueue_style()
などの関数によって行われます。
関数とフックの役割の違いに注意してください。
function は、呼び出されたときに事前定義タスクを実行するために何らかのCODEを実行します。
例:これらはすべてWordPressのコア関数です:
wp_register_script()
、wp_register_style
、wp_enqueue_script()
、wp_enqueue_style()
。hook は、CODE実行の事前定義された時点でのみ callable function(後で実行される)を付加します。
例:これはWordPressのコア(アクション)フックです。
wp_enqueue_scripts
- 最後のs
複数)に注意してください。二重チェック:
wp_enqueue_script()
は関数、wp_enqueue_scripts
はアクションフックです。
だからあなたの修正されたコードは以下のようになるはずです。
private function define_public_hooks() {
// ...
$this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'register_styles' );
$this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'register_scripts' );
// ...
}
その後、
public function register_scripts() {
wp_register_script( $this->plugin_name . '_google_maps_api', '//maps.googleapis.com/maps/api/js?key='. $gmap_key.'&v=3&libraries=places', array( 'jquery' ), '3', true );
}
その後、ショートコードハンドラ関数内からスクリプト(&style)をエンキューします。
public function your_shortcode_handler( $atts ) {
// shortcode related CODE
wp_enqueue_script( $this->plugin_name . '_google_maps_api' );
// more shortcode related CODE
}
このCODEでは、your_shortcode_handler
関数からエンキューされたスクリプト/スタイルは、その特定のURLにショートコードがある場合にのみあなたのサイトに追加されます。
_(この答え はショートコードがあるときだけスクリプトとスタイルをキューに入れることについて興味深い議論をしています。
それで問題はadd_action
呼び出しへの最初の引数が WordPress action名である必要があるということです...だから、WPアクションではない "wp_register_script"は決して呼ばれません。
登録呼び出しをプラグインのenqueue_scripts関数に追加するだけです。define_public_hooksを使用したり、新しいregister_scripts関数を作成したりする必要はありません。既存のenqueue_scripts関数を使用するだけですが、そこに登録を追加してください。
public function enqueue_scripts() {
wp_enqueue_script( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'js/plugin-name-public.js', array( 'jquery' ), $this->version, false );
// NOTICE this is a *registration* only:
wp_register_script( $this->plugin_name.'_google_maps_api', '//maps.googleapis.com/maps/api/js?key='. $gmap_key.'&v=3&libraries=places', array( 'jquery' ), '3', true );
}
次に、短いコードを入力したら、スクリプトを登録して、キューに入れる準備をします。
お役に立てれば!