web-dev-qa-db-ja.com

フックごとに配列をフィルタ可能にする

do_actionadd_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');
1
Hossam hamed

配列をフィルタ処理可能にしたい場合は、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;>&nbsp;</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' );

それで全部です。

0
fuxia

あなたの質問は理解するのが少し難しいです。私はあなたがこれを望んでいると思います。

フックを定義します。

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();

あなたが配列を返したい場合は、このコードは動作するはずです。楽しい!!!

0
Faysal Mahamud