0

すぐに解決策を投稿するつもりですが、これは今日私が追いついたもので、その後解決しました。私の問題は、ショートコードの結果を他のショートコード呼び出しのパラメーターにネストしたいということです。

do_shortcode を使用してショートコードを処理できることは知っていますが、これらのショートコード呼び出しのソース コードを所有しておらず、編集したくありません。

4

1 に答える 1

0

次の 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);
}
于 2013-10-23T02:23:38.273 に答える