短いコードで「]」をエスケープするにはどうすればよいですか?


17

短いコードで右括弧をエスケープするにはどうすればよいですか?

エンコードされたポイントを持つGoogleマッププラグインで作業しています。場合によっては、ポリゴンに]が含まれているため、WPがショートコードの終わりであるとWPに認識させます。

例えば:

[my_shortcode latitude='36.93'  longitude='-72.98' encoded_points='ortlF~g]tM?cZEH`z]}|@DQfi]' ]

]WPに問題を引き起こしていないものを試しましたが、Googleマップコードに問題を引き起こしています。Regexを使用して]を置き換えることもできますが、もっと簡単な方法があるかもしれません。ショートコードにはエスケープ文字がありますか?

回答:


18

ショートコードの公式のエスケープ構文は知りませんし、おそらくないでしょう。

ワードプレスがショートコードを解析するとき、[]を探します。ショートコード内で角括弧を使用する場合、それぞれのhtml ASCIIエンティティを使用すると角括弧がエスケープされます。

すなわち置換[により[及びによって]。Wordpressは]ショートコードの終わりとして認識しません。

それが目的にかなうかどうかは、Google Maps APIに渡される前に]に変換されるか、APIが期待どおりに処理するかによって異なります。私はその経験がないので、言うことはできません。


お返事ありがとうございます。私の質問では、「]」を付けるのを忘れていました コードブロック内で ']'として出力されました。質問を編集しました。HTMLエンティティはWPで機能しますが、Googleマップでは機能しません。HTMLエンティティを置き換えるには、正規表現を使用する必要があります。助けてくれてありがとう。
ラックミディ

@Laxmidi私の上記の「推測」では、確実にエスケープ文字の境界線はありません-誤報を提供しないように注意したかっただけです。あれば、Shortcode APIのコーデックス記事で言及されていると思います。後で交換するのが最善策だと思います。ただし、1文字の正規表現が必要ですか?私str_replace()も仕事を成し遂げるべきだと思う。もしそうなら、それほどリソースを消費しません。
ヨハネスポール

1
@JohannesPilleこんにちは、オールディーズですが、[]も]に置き換える必要があります。WPでの初回の保存とそれは機能しますが、投稿/ページの編集時にWPが]になります。に]。(ショートボタン上のGoogleのイベントの追跡のためにこれを必要とする)について
アレックス

@alexが言ったように、ビジュアルタブに切り替えてコードタブに戻ると、tinyMCEが特殊文字を[]に戻し、コードを壊すことがわかります。
サウロパディーリャ

tinyMCEはJavascriptであり、プラグイン可能です。見てみましょうwpse /質問/ 223677 /追加カスタム・テキスト・パターン・イン・-WP-4-5ビジュアルエディタを。@alex
ヨハネス

2

Johannes Pilleの回答に基づいて、ショートコードパラメータでテキストを使用するために角括弧をエスケープするwp関数があります。

function my_esc_brackets($text = ''){
    return str_replace( [ "[" , "]" ] , [ "[" , "]" ] , $text );
}

多くの場合、テキストパラメータにショートコードの$ contentを使用することを提案しますが、ショートコードにそのようなテキストパラメータが多数ある場合があります。


2

ここに公式ページがあるようです: ショートコードのエスケープ

抽出:

これを行うには、1つだけではなく2つのブラケットセットを使用してショートコードをエスケープする必要があります。これを投稿に表示するには:

[ギャラリー]

あなたはこれを書くでしょう:

[[ギャラリー]]


0

urlで遊んでいない場合でも、attribute_valueの [と]の代わりに%5Bと%5Dを使用したurldecode(your attribute_value)を使用してください。

コードは次のようになります。

あなたのWPページで: [my_shortcode myattr="%5Bmyattribute_value%5D"]

次に、ショートコード関数で次のようにします。

 $origvalue=urldecode($atts['myattr']);

これにより、$ origvalueの[および]文字が復元され、$ origvalueに次が含まれるようになります。 [myattribute_value]

ヒント:urlで遊んでいる場合、同じことをしますが、関数コードに以下を追加します:

$urlvalue = urlencode($origvalue);

それが明確でない場合:はい、URLの正しい部分を構築するためにurlencode(urldecode($ attsの値))を実行しています。

とても簡単です。これが役立つことを願っています。

ピエール


-1

これは古い質問ですが、cssを使用した回避策があります。中括弧の代わりに、次のように文字をスパンで囲みます。

<span class="bracket">some string</span>

次に、これをテーマのスタイルシートに追加します。

span.bracket:before {
  content: '['
}
.colored-blocks span.bracket:after {
  content: ']'
}

結果は次のようになります。

[some string]


3
問題は]、コンテンツの一部として挿入することであり、表示方法についてではありません。
マークカプルン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.