2012-01-23 11 views
4

Shortcode APIには、属性に角括弧を使用できないと記載されています。したがって、以下は動作しません。ブラケットの問題を含むショートコード属性

[tag attribute="[Some value]"] 

私の場合、角括弧が必要です。この問題を回避する最良の解決策は何でしょうか?私はすでにショートコード機能でコンテンツをエスケープしようとしましたが、運がありませんでした。

私はワードプレス3.3.1を使用しています。

+0

私はまたこれを必要とします私の属性にはファイル名が含まれています。ファイル名には角括弧が付いています(特にMacの場合)。 正規表現を修正する方法はありますか?]記号が1つのスピーチマークの後で、1秒前、つまり「]」内にある場合、ショートタグを閉じることはありませんか? –

答えて

0

ショートコードに他の特殊文字を使用し、ショートコード機能で角かっこを置き換えます。 - これはあなたが望むものではないので、ここでは別の方法があります。

ショートコードAPIに頼るのではなく、内容に "apply_filters"を使用してpreg_replaceを使用して自分のショートコードを書くことができます処理機能。

+0

残念ながら、その解決策は理想的ではありません。それは、ユーザーが特殊文字を括弧に変換して記憶していることを覚えておく必要があります。私はむしろ、実際には私のコードを回避策に変えるよりも、問題を解決したいと思います。しかし、提案していただきありがとうございます。 –

+0

私はあなたのお手伝いをするべきものに私の答えを編集しました。 – aghoshx

0

括弧がHTMLの一部として表示される場合は、&#...;を使用するか、URLの一部として%...を使用してください。

自分のショートコードに関係する場合は、他の文字を置き換えてください。 {}によって[]、ショートコードのコードの内側に。

あなたのショートコードでない場合は、プラグイン/コアを変更することがあります。私は、更新プログラムを壊さないためにラッパーコードを書いています。

+0

私が最初の質問で述べたように、括弧を逃げるためのすべての試みは無駄です。何かあれば、コアを編集する必要があるようです。私は私の質問は、次に、これを行う方法のコアをよく知っている誰かからアドバイスを求めていると思います。 –

+0

私はすべてのアップデートで壊れるため、コア自体は変更しません。代わりに、自分のショートコードを書くようにしてください。プラグインとして。 –

0

ショートコード属性でjsonを保存します。私たちは、角括弧を非表示にするBASE64_ENCODEを使用することにしましたが、我々はいくつかの問題に直面した:あなたは、いくつかのデータベースに置き換えるようにしたい場合は

  • Themecheckは、例えばのために、base64で機能
  • について不平を言います新しいサイトのURLを持つすべての古いサイトのURLを置き換えるために、正規表現は、base64でエンコードされた文字列

の内側にあるものを見ることができない別の解決策は、

function encode($str) { 
    $str = htmlentities($str, ENT_QUOTES, 'UTF-8'); 

    // http://www.degraeve.com/reference/specialcharacters.php 
    $special = array(
     '[' => '[', 
     ']' => ']', 
    ); 
    $str = str_replace(array_keys($special), array_values($special), $str); 

    return $str; 
} 

function decode($str) { 
    return html_entity_decode($str, ENT_QUOTES, 'UTF-8'); 
} 

$original = '[1,2,3,"&",{a:1,b:2,"c":"Результат"}]'; 
$encoded = encode($original); 
$decoded = decode($encoded); 

echo "Original:\t", $original, PHP_EOL; 
echo "Shortcode:\t", '[hi abc="'. $encoded .'"]', PHP_EOL; 
echo "Decoded:\t", $decoded, PHP_EOL; 
echo "Equal:\t\t", ($original === $decoded) ? 'YES' : 'NO'; 

出力

にhtmlentitiesを使用して、あります
Original: [1,2,3,"&",{a:1,b:2,"c":"Результат"}] 
Shortcode: [hi abc="[1,2,3,"&",{a:1,b:2,"c":"Результат"}]"] 
Decoded: [1,2,3,"&",{a:1,b:2,"c":"Результат"}] 
Equal:  YES 

http://ideone.com/fNiOkD

関連する問題