0

WordPressショートコードの作成に取り組み始めていますが、特に「Return」を使用して出力を表示する方法を理解するのに苦労しています。私が持っているコードは

if (!function_exists('kfl')) {
    function kfl( $atts, $content = null ) {
        extract(shortcode_atts(array(
            'title'      => 'Title goes here',
        ), $atts));

        return "<div class=\"container panel\">";
        return "<h3 class=\"kfl title\">".$title."</h3>";
        return "</div>";
    }
    add_shortcode('kfl', 'kfl');
}

?>

これを使用すると何も表示されません。2 番目の Return 行を削除して .$title を最初の行に追加すると、コンテナ パネルとスタイルのないタイトルが表示されます。リターンをエコーに置き換えると、すべて正常に機能しますが、「リターン」を使用する必要がある理由があるに違いないと思います(ほとんどの場合)。

アドバイスやガイダンスをいただければ幸いです。

ありがとう

4

4 に答える 4

1

通常、ショートコードとして登録された関数には変数があり、コードを徐々に挿入してから返します。あなたの場合:

if (!function_exists('kfl')) {
    function kfl( $atts, $content = null ) {
        extract(shortcode_atts(array(
            'title'      => 'Title goes here',
        ), $atts));

        $output = "<div class=\"container panel\">";

        $output .= "<h3 class=\"kfl title\">".$title."</h3>";

        $output .= "</div>";

        return $output;
    }
    add_shortcode('kfl', 'kfl');
}
于 2013-11-13T18:41:17.490 に答える
1

あなたのコードの問題はここにあります:

    return "<div class=\"container panel\">";
    return "<h3 class=\"kfl title\">".$title."</h3>";
    return "</div>";

1番目returnが処理されると、コントロールは関数を離れるため、2番目と3番目returnsは実行されません

それらすべてを返す必要がある場合は、それらすべてを単一の変数に連結し、最後に次のように返します。

$return = "<div class=\"container panel\"><h3 class=\"kfl title\">".$title."</h3></div>";
return $return ;

そうでなければ、それらすべてを表示したいだけなら、これを使用してください:

    echo "<div class=\"container panel\">";
    echo "<h3 class=\"kfl title\">".$title."</h3>";
    echo "</div>";
于 2013-11-13T18:47:16.630 に答える
0

実行がリターンに達すると、関数を離れます。したがって、3 つの return を続けて配置すると、2 番目と 3 番目が実行されないことを意味します。文字列連結演算子を使用して 3 つの部分を 1 つの文字列に結合すると、次のようなことができます。

function foo() {
    // blah blah blah
    return
        '...' .
        '...' .
        '...';
}
于 2013-11-13T18:39:27.113 に答える
0

要素を連結.して、最後に結果を返すことができます。

$html = '';
$html .= '<div class="container panel">';
$html .= '<h3 class="kfl title">' . $title . '</h3>';
$html .= '</div>';
return $html;
于 2013-11-13T18:41:21.993 に答える