すぐに解決策を投稿するつもりですが、これは今日私が追いついたもので、その後解決しました。私の問題は、ショートコードの結果を他のショートコード呼び出しのパラメーターにネストしたいということです。
do_shortcode を使用してショートコードを処理できることは知っていますが、これらのショートコード呼び出しのソース コードを所有しておらず、編集したくありません。
次の PHP は新しいショートコード (「ネスト」) を作成します。これに「ショートコード」パラメーターを渡して、最初に呼び出す予定だったショートコードを指定します。ショートコードのすべての引数自体を解析した後、そのショートコードを呼び出します。ショートコードを引数に入れるには、山括弧 [ ] の代わりに中括弧 { } を使用します。
例えば:
[nest shortcode="twitter" float="left" url="{geturl}"]
となります:
[twitter float='left' url='[geturl]']
[geturl] ショートコード呼び出しは、ショートコードが返される前に解決され、次のようになります。
[twitter float='left' url='http://stackoverflow.com']
[start] [/end] ショートコードでも機能しますが、HTML を指定して "content" パラメータを渡す必要があります。例えば:
[nest shortcode="button" content="{state}" size="large"]
次のようになる可能性があります。
[button size='large']South Carolina[/button]
これが誰かを助けることを願っています!
functions.php のコードは以下のとおりです。
add_shortcode('nest', 'shortcode_nest');
function shortcode_nest($atts) {
// Call using [nest shortcode=originalshortcode param="in {getcountryshortcode}"]
// to generate [originalshortcode param="in United Kingdom"]
// or [nest shortcode=originalshortcode content="hello!" param="in {getcountryshortcode}"]
// to generate [originalshortcode param="in United Kingdom"]hello![/originalshortcode]
$shortcode = $atts["shortcode"];
unset($atts["shortcode"]);
foreach ($atts as $key => $value) {
$value = str_replace('{', '[', str_replace('}', ']', $value));
$value = do_shortcode($value);
if ($key == "content")
$content = $value;
else
$stratts .= "$key='$value' ";
}
if ($content == "")
$fullcode = "[$shortcode $stratts]";
else
$fullcode = "[$shortcode $stratts]$content" . '[/' . $shortcode . ']';
return do_shortcode($fullcode);
}