2012-11-06 20 views
4

我有一个自定义的短代码标签,它带有一些属性,我希望能够在新行上显示其属性 - 使其更易读内容编辑:wpautop() - 当shortcode属性在新行上时 - 破坏args数组

[component 
    attr1 ="value1" 
    attr2 ="value of the second one" 
    attr3 ="another" 
    attr4 ="value" 
    ... 
    attrN ="valueN"] 

这个要求背后的原因是一些属性可能在内容上非常冗长。不幸的是,wpautop()增加了一些讨厌的额外的标记,打破了args阵列像这样(使用PHP print_r($args)):

Array ([0] => attr1 [1] => ="value1" 
/> [3] => attr2 = [4] => "value [5] => of [6] => the [7] => second [8] => one" 
/> [10] => "" //...and more like this) 

我试着属性直列

[component attr1 ="value1" attr2 ="value of the second one" ="value"... attrN ="valueN"] 

和输出如预期的那样:

Array ([attr1] => value1 [attr2] => value of the second one [attr3] => //...and so on) 

是否有任何方法来使属性满足和一个无效的额外标记打破$args阵列?

+0

您是否知道这是由wpautop引起的,因为您试图禁用它?我认为这听起来更像是你有一个shortcode_parse_atts()的问题... –

+2

不知道什么时候wpautop运行,但也许你可以预先运行add_filter,删除短代码换行符。 – hansvedo

+0

@ hansvedo如果我确实记得没错,'wpautop()'在过滤器之前运行,我想我前一阵没有成功尝试过这个过程。也@Calle在这个问题上的更多见解可以在这里阅读:http://wordpress.stackexchange.com/questions/71698/wpautop-when-shortcode-attributes-are-on-new-lines-break-args-array/ 71723#71723 - 我最终写了一个自定义插件,以实现我所需要的,但问题本身仍然没有答案。感谢两个建议,但! – Luca

回答

0

接受的答案 - 信贷@Stephen

好吧,我从来没有见过这样做了简码,所以我扔在一起的一些代码来测试您的方案。我使用标准简码格式的代码可以得到相同的结果。

标准简码格式

[shortcode name1="value1" name2="value2"] 

我不相信这是wpautop(的结果),但对简码属性分析方法的结果。看看上面的例子,你会发现唯一没有引号的空格用于分隔短代码和name =>值对(即名称和'='之间没有空格,每个名称之间只有一个空格=>值对)。在这种情况下,
也被视为空白。

我还没有深入到短代码解析的特定内部,所以我不能提供一个钩子或过滤器,这将有所帮助的建议。也许另一位用户对此有一些想法。

如果你必须像你拥有它一样格式化你的短代码,我想你将不得不编写自定义代码来解析传递给你的短代码函数的数组。所有的价值都在那里,所以你应该能够将它们拼凑起来。

另一个选择可能是为最终用户提供一个表单,用于输入值,然后在您的内容中填充短代码。

更新到我的回答

一些关于我的答案是缠着我,所以我又看了一遍。你是正确的wpautop()对页面的输出有影响。但我不认为这是您的简码问题的原因。