如何在短代码中转义右括号?

我正在研究一种具有编码点的Google Map插件。有时多边形中包含],这使WP认为这是简码的结尾。

例如:

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


我已经尝试过]了,但这并没有引起WP的问题,但是却引起了问题为我的Google地图代码。我可以使用Regex替换],但是也许有一种更简单的方法。简码是否具有转义符?

#1 楼

我不知道用于短码的官方转义语法,可能还没有。

当wordpress解析短码时,它会寻找[和]。如果要在简码中使用方括号,请使用相应的html ASCII实体对其进行转义。

即用[代替[由]和]。 Wordpress不会将]识别为简码的结尾。

是否达到目的显然取决于在传递给Google Maps API之前是否已将其转换为]或API是否按预期进行处理。我对此没有经验,所以不能说。

评论


Thank you for you answer. In my question, I forgot to put ']' in a code block so it came out as a ']'. I've edited my question. The HTML entity works for WP, but not for Google Maps. I'll have to use Regex to replace the HTML entities. Thank you very much for the help.

– Laxmidi
Nov 17 '11 at 17:47

@Laxmidi我的上面的“猜测”是确定性上没有转义字符边界-只是想谨慎不要提供错误的信息。如果有的话,我很肯定Shortcode API上的法典文章会提到它。我认为事后替换是您最好的选择。您是否需要一个字符的正则表达式?我认为str_replace()也应该完成这项工作。如果这样做的话,将减少资源消耗。

–约翰内斯·皮尔(Johannes Pille)
2011年11月17日在17:55

@JohannesPille hello it's an oldie, but i need to have the [ ] also replaced by ]. First time saving in WP and it works, but when editing the post/page WP turns ] into ]. (need this for a google event tracking on shortcode buttons) regards

– alex
Oct 18 '13 at 6:31

如@alex所说,如果切换到可视选项卡并返回到代码选项卡,将会看到tinyMCE将特殊字符更改回[],然后破坏代码。

– Saulo Padilha
19年11月9日在2:43

tinyMCE是Javascript且可插入。看看wpse / questions / 223677 /在wp-4-5-视觉编辑器中添加自定义文本模式。 @alex

–约翰内斯·皮尔(Johannes Pille)
19年11月10日,3:10

#2 楼

这里似乎有一个官方页面:转义简码

提取:


为此,您需要使用两组而不是一个括号。因此,要在您的帖子中显示此内容:

[画廊]

您应该这样写:

[[画廊]]


#3 楼

根据Johannes Pille的答案,有wp函数可以转义方括号,以便在简码参数中使用文本:

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


人们通常建议对文本参数使用简码的$ content,但是在某些情况下,简码具有许多此类文本参数。

#4 楼

即使您不使用url,也请使用urldecode(您的attribute_value),并将%5B和%5D替换为attribute_value中的[和]。

您的代码可能看起来像这样:

在您的wp页面中:[my_shortcode myattr="%5Bmyattribute_value%5D"]

然后,在您的shortcode函数中,只需执行以下操作:

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


这将恢复$ origvalue中的[和]字符,因此$ origvalue现在包含:[myattribute_value]

提示:如果您是使用url播放,执行相同操作,但是将以下内容添加到功能代码中:

$urlvalue = urlencode($origvalue);


如果不清楚:是的,我在做urlencode(urldecode(some $ atts的值)来构建网址的正确部分。

很简单,希望对您有所帮助。

Pierre

#5 楼

这是一个古老的问题,但这是使用CSS的解决方法。代替大括号,将字符括在一个范围内,如下所示:

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

,然后将其添加到主题样式表中:

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


结果将如下所示:

[some string]

评论


问题是要插入]作为内容的一部分,而不是如何显示它。

–马克·卡普伦
16年4月12日在11:57