Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php wpautop()-当短代码属性位于新行上时-断开args数组_Php_Arrays_Wordpress_Shortcode - Fatal编程技术网

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
数组(使用php
print\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"]