Shortcode API表示您的属性中不能包含方括号。因此,以下方法不起作用:
[tag attribute="[Some value]"]
在我的情况下,方括号是必需的。解决这个问题的最佳解决方案是什么?我已经尝试在我的短代码函数中转义内容,但没有运气。
我正在使用WordPress 3.3.1。
答案 0 :(得分:1)
在短代码中使用其他特殊字符,并在短代码功能中替换方括号。 - 由于这不是你想要的,这里有另一种选择。
这似乎是我能想到的唯一适用于您的情况,而不是依赖于Shortcode API,您可以在内容上使用“apply_filters
”,然后使用{{1编写自己的短代码处理函数。
答案 1 :(得分:0)
如果括号显示为HTML生成的一部分,请尝试使用&#...;
或使用%...
作为网址的一部分。
否则,如果它涉及您自己的短代码,只需替换其他一些字符,例如{}
[]
,在短代码的代码中。
如果它不是您自己的短代码,您可以修改插件/核心。我会写一个包装器代码,以免破坏更新。
答案 2 :(得分:0)
我们将json存储在短代码属性中。我们决定使用base64_encode来隐藏方括号,但是我们遇到了一些问题:
还有另一种解决方案,使用htmlentities
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';
输出
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