web-dev-qa-db-ja.com

ショートコードをネストした二重引用符で機能させる

私は以下のショートコードを持っています:

function infobox_shortcode( $atts, $content = null ) {

    extract( shortcode_atts( array(
      'src' => '',
      'title' => '',
      'text' => '',
    ), $atts, 'infobox' ) );

    $return = '<div class="infobox clearfix"><div class="col-md-1 infobox-image"><img src="'.$src.'" alt="'.$title.'"/></div><div class="col-md-8 infobox-content"><h2> ' . $title . '</h2><p>' . $text . '</p></div></div>';

    return $return;

}
add_shortcode( 'infobox', 'infobox_shortcode' );

ユーザーがこのように単純に使用すると、これはうまく機能します。

[infobox src="http://www.google.com" title="Google" text="Some description"]

しかし:

ユーザーが追加を試みるとすぐにショートコードへの引用符付きのリンク、それは - もちろん - 壊れます:

[infobox src="http://www.google.com" title="Google" text="Some description - see more: <a href="http://www.google.com">More here</a>"]

問題は、私のユーザーがWPエディタを使用してリンクを追加しているため、二重引用符が表示されることです。 Alsor WordPressは、デフォルトでは属性の一重引用符を削除し、二重引用符を追加して、それから私のショートコードを壊します。

現時点で私はこれに対して2つの解決策を見ていますが、両方ともまったく満足できるものではありません。

a)WPに、投稿を保存している間はhrefリンクで一重引用符を二重引用符に変換しないように指示する、またはb)二重引用符でショートコードを機能させるには。

他に何かヒントや回避策はありますか。

ありがとうございます。

マイク

4
Mike

いずれにせよ、これはショートコードでの任意のマークアップのためのとても不格好な解決策のように思えます。

1つの属性だけがもっと大きく、マークアップを含んでいる場合は、ショートコードを囲むことを検討します。

[infobox src="http://www.google.com" title="Google"]
    Some description - see more: <a href="http://www.google.com">More here</a>
[/infobox]

あなたがカスタムUIを構築する必要があるときにはポイントになるかもしれませんし、そうでなければそれはユーザーにとってあまりにも間違いを起こしやすいでしょう。

3
Rarst