wpautop() - 当短代码属性在新行上时 -breaks args array [关闭]

Posted

技术标签:

【中文标题】wpautop() - 当短代码属性在新行上时 -breaks args array [关闭]【英文标题】:wpautop() - when shortcode attributes are on new lines -breaks args array [closed] 【发布时间】:2012-10-26 07:37:37 【问题描述】:

我有一个带有一些属性的自定义短代码标签,我希望能够在新行上显示它的属性 - 使其对内容编辑器更具可读性:

[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)

我已尝试使用 inline 属性:

[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 数组的额外标记?

【问题讨论】:

你知道这是由 wpautop 引起的,因为你试图禁用它吗?我认为这听起来更像是您遇到了 shortcode_parse_atts() 的问题... 不确定 wpautop 何时运行,但也许您可以预先运行 add_filter 来删除短代码上的换行符。 @hansvedo 如果我没记错的话,wpautop() 在过滤器之前运行,我想我前段时间尝试过,但没有成功。 @Calle 也可以在此处阅读有关此问题的更多见解:wordpress.stackexchange.com/questions/71698/… - 我最终编写了一个自定义插件,以实现我所需要的,但问题本身仍然有点悬而未决。不过感谢两位的建议! @Luca 我认为它没有得到回答,因为大多数人不想花时间设置所有东西。看看我提到的 shortcode_parse_atts 函数。您可能只需要复制它,并将正则表达式中的 \s 替换为 [\s\n] 以包含空格和新行。但是您还需要制作自己的 do_shortcode_tag 和 do_shortcode 版本。既然你已经设置好了,你可以尝试暂时更改源代码,看看它是否有效。 我建议在这里关闭问题并keep the one on wp.se。这确实是一个 wordpress 问题,我想说这需要在 WP 核心中修复或更好地位于其他站点上的真正 WP 编码洞察力。 【参考方案1】:

接受的答案 - 归功于@Stephen

好的,我从未见过以这种方式完成的短代码,所以我拼凑了一些代码来测试您的场景。并且我得到了与标准简码格式正常工作的代码相同的结果。

标准简码格式

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

我不认为这是 wpautop() 的结果,而是解析短代码属性的方式的结果。查看上面的示例,您会看到唯一未加引号的空格用于分隔短代码和 name=>value 对(即 name 和 '=' 之间没有空格,每个 name=>value 之间只有一个空格一对)。在这种情况下, 也被视为空白。

我还没有深入研究短代码解析的特定内部结构,所以我无法提供有关钩子或过滤器的建议,这会有所帮助。也许这里的另一个用户对此有一些想法。

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

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

我的回答更新

我的回答有些让我烦恼,所以我又看了一遍。你是正确的 wpautop() 对页面的输出有影响。但我认为这不是您的短代码问题的原因。

【讨论】:

以上是关于wpautop() - 当短代码属性在新行上时 -breaks args array [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

PHP rm_wpautop

PHP WPAutoP

php 仅针对自定义帖子类型删除wpautop

关闭Wordpress中的wpautop(自动将双线分隔符转换为段落)

网站数据库设计酒店特色

在 PHP 邮件函数的 $body 中创建一个新行