包含括号问题的短代码属性

时间:2012-01-23 20:03:47

标签: wordpress

Shortcode API表示您的属性中不能包含方括号。因此,以下方法不起作用:

[tag attribute="[Some value]"]

在我的情况下,方括号是必需的。解决这个问题的最佳解决方案是什么?我已经尝试在我的短代码函数中转义内容,但没有运气。

我正在使用WordPress 3.3.1。

3 个答案:

答案 0 :(得分:1)

在短代码中使用其他特殊字符,并在短代码功能中替换方括号。 - 由于这不是你想要的,这里有另一种选择。

这似乎是我能想到的唯一适用于您的情况,而不是依赖于Shortcode API,您可以在内容上使用“apply_filters”,然后使用{{1编写自己的短代码处理函数。

答案 1 :(得分:0)

如果括号显示为HTML生成的一部分,请尝试使用&#...;或使用%...作为网址的一部分。

否则,如果它涉及您自己的短代码,只需替换其他一些字符,例如{} [],在短代码的代码中。

如果它不是您自己的短代码,您可以修改插件/核心。我会写一个包装器代码,以免破坏更新。

答案 2 :(得分:0)

我们将json存储在短代码属性中。我们决定使用base64_encode来隐藏方括号,但是我们遇到了一些问题:

  • Themecheck抱怨base64功能
  • 如果要在数据库中进行一些替换,例如用新网站网址替换所有旧网站网址,正则表达式无法看到base64编码字符串中的内容

还有另一种解决方案,使用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

http://ideone.com/fNiOkD