Shortcode API声明属性中不能有方括号。因此,以下内容将不起作用:
[tag attribute="[Some value]"]在我的例子中,方括号是必需的。绕过这个问题的最佳解决方案是什么?我已经尝试在我的短码函数中对内容进行转义,但没有成功。
我使用的是WordPress 3.3.1。
发布于 2012-01-24 04:08:31
在您的短码中使用一些其他特殊字符,并在短码函数中将其替换为方括号。-既然这不是你想要的,这里有一个替代方案。
这似乎是我能想到的唯一适用于您的情况,而不是依赖于短码API,您可以在内容上使用"apply_filters“,然后使用preg_replace来编写您自己的短码处理函数。
发布于 2012-01-24 04:13:44
如果括号作为生成的超文本标记语言的一部分出现,请尝试使用&#...;或作为网址的一部分,使用%...。
否则,如果它涉及到您自己的短码,只需在短码的代码中替换一些其他字符,例如用[]替换{}。
如果不是你自己的短码,你可以修改plugin / core。为了不破坏更新,我会编写一个包装器代码。
发布于 2014-10-28 18:53:22
我们将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: YEShttp://ideone.com/fNiOkD
https://stackoverflow.com/questions/8977838
复制相似问题