do_action
とadd_action
を使用してdo_action
の配列を返すにはどうすればよいですか?
私のサンプルコード:
function name_fun_one(){
$namearray[] = array('k1'=> 'text1', 'k2' => 'text1');
$namearray[] = array('k1'=> 'text2', 'k2' => 'text2');
do_action('add_in_namearray');
foreach($namearray as $val)
{
//loop
}
}
function add_name_fun_one()
{
$namearray[] = array('k1'=> 'text3', 'k2' => 'text3');
$namearray[] = array('k1'=> 'text4', 'k2' => 'text4');
}
add_action('name_fun_one', 'add_name_fun_one');
配列をフィルタ処理可能にしたい場合は、apply_filters()
とadd_filter()
を使用してください。また、配列をapply_filters()
への引数として渡し、その配列を変更しているコールバックでそれを期待する必要があります。
これは、もう少しわかりやすい名前の基本的な例です。
最初に、色付きの名前と値の配列をスタイル付きの例で印刷するために、それらを実行する関数があります。それはフックを提供するので、他のコード(テーマ、プラグイン)は色を変えることができます:apply_filters( 'arr_colors', $colors );
。
function print_colors()
{
$colors = [
'red' => '#f00',
'green' => '#0f0',
'blue' => '#00f',
];
$colors = apply_filters( 'arr_colors', $colors );
foreach ( $colors as $name => $color ) {
printf(
'%1$s: <span style="background: %2$s;> </span><br>',
$name,
$color
);
}
}
今度は色を変更できるコールバック関数を他の場所に作成します。 isset ( $colors['green'] )
のチェックに注意してください:そのフックでリッスンしているコールバックが複数あるかもしれないので、green
は我々のコールバックが実行される前に既に削除されているかもしれません。それを常に心に留めておいてください。
/**
* @param array $colors
* @return array
*/
function change_colors( array $colors )
{
// remove red
unset( $colors['red'] );
// soften the green
if ( isset ( $colors['green'] ) ) {
$colors['green'] = '#5f5';
}
// add Fuchsia
$colors['Fuchsia'] = '#f0f';
return $colors;
}
そして今、最初の関数でフックのためのコールバックを登録します。
add_filter( 'arr_colors', 'change_colors' );
それで全部です。
あなたの質問は理解するのが少し難しいです。私はあなたがこれを望んでいると思います。
フックを定義します。
function sample_hook() {
$namearray[] = array('k1'=> 'text1', 'k2' => 'text1');
$namearray[] = array('k1'=> 'text2', 'k2' => 'text2');
do_action('sample_hook',$namearray);
//you can add multiple args in do_action hook like do_action('sample_hook',$arg1,$arg2,$arg2);
}
add_actionを使って関数をフックに追加します。
add_action('sample_hook', 'sample_function');
function sample_function($namearray) {
print_r($namearray);
echo 'Hey, that is amazing.';
}
コンテンツを表示する場所には、必ず次のコード行をページに追加してください。
sample_hook();
あなたが配列を返したい場合は、このコードは動作するはずです。楽しい!!!