Php wpautop()-当短代码属性位于新行上时-断开args数组
我有一个带有一些属性的自定义快捷码标记,我希望能够在新行上显示其属性,以使内容编辑器更易于阅读:Php wpautop()-当短代码属性位于新行上时-断开args数组,php,arrays,wordpress,shortcode,Php,Arrays,Wordpress,Shortcode,我有一个带有一些属性的自定义快捷码标记,我希望能够在新行上显示其属性,以使内容编辑器更易于阅读: [component attr1 ="value1" attr2 ="value of the second one" attr3 ="another" attr4 ="value" ... attrN ="valueN"] 这一要求背后的原因是,一些属性的内容可能非常冗长。不幸的是,wpautop()添加了一些讨厌的额外标记,这样会破坏args数组
[component
attr1 ="value1"
attr2 ="value of the second one"
attr3 ="another"
attr4 ="value"
...
attrN ="valueN"]
这一要求背后的原因是,一些属性的内容可能非常冗长。不幸的是,wpautop()
添加了一些讨厌的额外标记,这样会破坏args
数组(使用phpprint\r($args)
):
我已尝试使用属性内联:
[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
数组的额外标记?接受的答案-归功于@Stephen
好的,我从来没有见过这样做的短代码,所以我拼凑了一些代码来测试您的场景。我得到的结果与使用标准短代码格式的代码相同
标准短码格式
[shortcode name1="value1" name2="value2"]
我不认为这是wpautop()的结果,而是分析短代码属性的方式的结果。看看上面的例子,您会发现只有一个不带引号的空格用于分隔短代码和name=>value对(即name和'='之间没有空格,每个name=>value对之间只有一个空格)。在此上下文中,也被视为空白 我还没有深入研究短代码解析的特定内部结构,因此我无法提供关于钩子或过滤器的建议。也许这里的另一位用户对此有一些想法 如果你必须像你拥有的那样格式化你的短代码,我认为你必须编写自定义代码来解析传递给你的短代码函数的数组。所有的值都存在,所以您应该能够将它们重新组合在一起 另一个选项可能是提供一个表单,供最终用户输入值,然后在内容中填充短代码 对我答案的更新
我的回答有些问题困扰着我,所以我又看了一遍。您是对的,wpautop()对页面的输出有影响。但我不认为这是您的短代码问题的原因。您知道这是由wpautop引起的,因为您试图禁用它吗?我觉得这听起来更像是你在使用shortcode_parse_atts()时遇到了问题……不确定wpautop何时运行,但也许你可以事先运行一个add_筛选器,删除短代码上的换行符。@hansvedo如果我没记错的话,
wpautop()
在筛选器之前运行,我想我不久前已经尝试过了,但没有成功。另外@Calle关于这个问题的更多见解可以在这里阅读:-我最终编写了一个自定义插件,以实现我所需要的,但问题本身仍然是一种未解之谜。谢谢你们两位的建议@卢卡:我想这个问题还没有得到回答,因为大多数人都不想花时间把一切都安排好。看看我提到的shortcode_parse_atts函数。您可能只需要复制它,并将regexp中的\s替换为[\s\n],以包含空白和新行。但是,您还需要制作自己的dou-shortcode-tag和dou-shortcode版本。既然你已经设置好了,你可以试着暂时改变源代码看看它是否有效。我建议在这里结束这个问题。这确实是一个wordpress的问题,我想说这需要在WP核心内进行修复,或者在另一个站点上更好地找到真正的WP编码洞察。
[shortcode name1="value1" name2="value2"]