Do_actionとadd_actionが正確に機能するものを見つけようとしています。私はすでにadd_actionで調べていますが、do_actionについては、今は新しいものとして試しています。これは私が試したものです。
function mainplugin_test() {
$regularprice = 50;
if(class_exists('rs_dynamic')) {
$regularprice = 100;
}
// and doing further
//like i echoing the regular price
echo $regularprice; //It print 100 from this code
}
現在、メインファイルにいくつかのコードを配置する代わりに、コードの混乱の問題を回避するためにdo_actionを作成する予定です。
function mainplugin_test() {
$regularprice = 50;
do_action('testinghook');
// and doing further
//like i echoing the regular price
echo $regularprice; //It should print 100 but it print 50
}
だから私はそのようなフックを次のようなものとして指摘する別の関数を作成しました
function anothertest() {
if(class_exists('rs_dynamic')) {
$regularprice = 100;
}
}
add_action('testinghook','anothertest');
上記の関数が機能する可能性のあるフックにコード行を追加する方法がわからないのですか?私のテスト環境で試したところ、何も役に立ちません。正しいdo_actionがファイルをインクルードするようなものだと理解できたら?そうでない場合は私に助言してください。
ありがとう。
anothertest()
関数内の_100
_関数はその関数に対してローカルであるため、_$regularprice
_を出力しなかった理由。親mainplugin_test()
関数で使用される変数_$regularprice
_は、anothertest()
関数で使用される変数とは異なります。これらは別のスコープにあります。
そのため、グローバルスコープで_$regularprice
_を定義する必要があります(これはお勧めできません)。または引数をパラメーターとして _do_action_ref_array
_ に渡すことができます。 _do_action_ref_array
_は_do_action
_と同じですが、2番目のパラメーターをパラメーターの配列として受け入れます。
_function mainplugin_test() {
$regularprice = 50;
// passing as argument as reference
do_action_ref_array('testinghook', array(&$regularprice));
echo $regularprice; //It should print 100
}
// passing variable by reference
function anothertest(&$regularprice) {
if(class_exists('rs_dynamic')) {
$regularprice = 100;
}
}
// remain same
add_action('testinghook','anothertest');
_
do_action
はアクションフックを作成し、add_action
フックが呼び出されると、フックされた関数を実行します。
たとえば、テーマのフッターに次を追加した場合:
do_action( 'my_footer_hook' );
Functions.phpまたはカスタムプラグインからその場所のコンテンツをエコーできます。
add_action( 'my_footer_hook', 'my_footer_echo' );
function my_footer_echo(){
echo 'hello world';
}
変数をフックに渡すこともできます:
do_action( 'my_footer_hook', home_url( '/' ) );
コールバック関数で使用できるもの:
add_action( 'my_footer_hook', 'my_footer_echo', 10, 1 );
function my_footer_echo( $url ){
echo "The home url is $url";
}
あなたの場合、おそらく条件に基づいて値をフィルタリングしようとしています。それがフィルターフックの目的です。
function mainplugin_test() {
echo apply_filters( 'my_price_filter', 50 );
}
add_filter( 'my_price_filter', 'modify_price', 10, 1 );
function modify_price( $value ) {
if( class_exists( 'rs_dynamic' ) )
$value = 100;
return $value;
}
参照
実際、add_action
はアクションフックで、アクションとdo_action
は、その登録済みアクションを手動で呼び出すために使用されます。例えば:
add_action('some_hook', 'handler_for_some_hook');
このハンドラは、取得するか、スクリプトがsome_action
ただし、必要に応じて、do_action
。したがって、基本的にはdo_action
を呼び出すと、登録済みアクションフックが呼び出されます。 Codex の詳細を確認してください。
// do_actionを使用して独自のtag(hook)を作成しますwordpress例:これを呼び出すカスタム関数を1つ追加しましたadd_actionで任意のカスタムタグ名で関数名を追加しましたタグ名)
function mywork()
{
echo "display my name";
}
add_action('mytag','mywork');
do_action('mytag');
--- add_action()---
function()の影響を受けるフック固有のフック
add_action( hook, **function**() )
wordpressの機能と動作を変更します。特定の「フック」により、それを変更でき、メソッドを変更できます。