私の質問は非常に単純ですが、私はまだこの答えを見つけていません。これが例です:
class MyClass {
public function __construct(){
add_action('init', array($this, 'init'));
add_action('wp_footer', array($this, 'footer'));
}
public function init(){
add_action('init', array($this, 'register_scripts'));
}
public function register_scripts(){
wp_register_script('my-script', plugins_url('/script.js', __FILE__));
}
public function footer(){
echo('<div class="style-me">Rawr this is my plugin.</div>');
}
}
これは私のコードがどのように見えるかであり、失敗しています。 divは表示されますが、JavaScriptは適用されません。だから私の問題はinitアクションでinit()
関数を実行してからinitアクションにregister_scripts()
を追加することではないかと思いましたが、私はすでにそのアクションに入っています。これは可能ですか?
あなたはもっと遅い(より高い)優先順位を使わなければなりません。それでcurrent_filter()
を使って現在のフックと優先順位を取得し、その優先順位に1を加えて次のアクションを登録します。
add_action( 'init', 'func_1' );
function func_1()
{
global $wp_filter;
$hook = current_filter();
add_action( $hook, 'func_2', key( $wp_filter[ $hook ] ) + 1 );
}
function func_2()
{
echo 'hi!';
}
はい、これはおそらく問題です。なぜあなたはこのアプローチを使っていますか?
どうして次のようにしないのですか?
public function init(){
wp_register_script('my-script', plugins_url('/script.js', __FILE__));
}
私はこれが古い質問であることを知っています、しかしバージョン4.7では、WordPressはそれらがフックを扱う方法を変えたので、上の答えはもはや働かないでしょう。
関連する違いは4.7の前後のバージョンのためのフックの現在の優先順位を返す関数を含むmy-functions.php
ファイルにあります。
(注:コンストラクターにフックを追加するのは好きではありません。そのため、プラグインの構造を少し変えるために自由を取っていますが、同じように機能します。)
My-plugin.phpでは、
require_once( PATH_TO . '/my-functions.php' );
require_once( PATH_TO . '/my-class.php' );
add_action( 'plugins_loaded', [ new MyClass(), 'register' ] );
My-functions.phpで:
if( ! functions_exists( 'current_priority' ) ):
function current_priority() {
global $wp_filter;
global $wp_version;
return version_compare( $wp_version, '4.7', '<' ) ?
key( $wp_filter[ current_filter() ] ) :
$wp_filter[ current_filter() ]->current_priority();
}
endif;
Myclass.phpで:
class MyClass {
public function register() {
add_action( 'init', [ $this, 'init' ] );
add_action( 'wp_footer', [ $this, 'footer' ] );
}
public function init(){
//* Add action to current filter at the next priority
add_action( current_filter(), [ $this, 'register_scripts' ], current_priority() + 1 );
}
public function register_scripts(){
wp_register_script( 'my-script', plugins_url( '/script.js', __FILE__) );
}
public function footer(){
echo( '<div class="style-me">Rawr this is my plugin.</div>' );
}
}