web-dev-qa-db-ja.com

ネストしたショートコードに変数を渡る

ネストされたショートコードでプラグインを設定しています。

[ct_training_group]
    [ct_training]
[/ct_training_group]

これがそのキャッチです。私は[ct_training]コードを親の外でもその中でも使用し、それぞれの場合で少し異なる何かを出力したいと思います。それがグループの中にあるとき、私はそれがそれ自身で呼ばれるときに私が<ul>ショートコードをラップするであろう</ul>[ct_training]を省略する必要があります。

これを行う最も簡単な方法は、親から子に変数を渡すことです。私がグローバルなものなどを台無しにする必要がないだろうところでこれを行うための優雅な方法がありますか?

ありがとう。

1
jdp

ct_training_groupの内容を別のdo_shortcode()の呼び出しに渡すだけだと思いますか。追加のパラメータを渡すことはできません。グローバル状態変数を使用したくない場合は、ct_trainingの現在のショートコードハンドラを、追加の<ul>を追加しないものに常に置き換えることができます。ハンドラー用のキャッシュがないように見えるので、パフォーマンスの低下はありません。

add_shortcode('ct_training', 'ct_training_full');
function ct_training_full($attr, $content)
{
    return '<ul>' . ct_training_item($attr, $content) . '</ul>';
}

function ct_training_item($attr, $content)
{
    return '<li>CT Training</li>';
}

add_shortcode('ct_training_group', 'ct_training_group_handler');
function ct_training_group_handler($attr, $content)
{
    $output = '<h3>CT Training group</h3>';
    $output .= '<ul>';
    // Redefine the sub-code
    add_shortcode('ct_training', 'ct_training_item');
    $output .= do_shortcode($content);
    // Reset the sub-code
    add_shortcode('ct_training', 'ct_training_full');
    $output .= '</ul>';
    return $output;
}
3
Jan Fabry