是否按组处理快捷代码(用换行符分隔)?

时间:2013-02-10 作者:Austin

该项目我正在开发一个插件,使用将转换为<img> 标签。在大多数情况下,每行将有多个图像,行之间用换行符分隔。下面是文本编辑器中4行的简化示例。。。

[img id="311409" w="1200" h="800"][img id="287556" w="900" h="750"]

[img id="511289" w="600" h="800"][img id="839905" w="850" h="850"][img id="214342" w="1150" h="1800"][img id="973537" w="450" h="300"]

[img id="223798" w="1600" h="900"]

[img id="592297" w="750" h="900"][img id="896732" w="800" h="600"][img id="722292" w="900" h="1100"]
宽度和高度短码属性是每个图像的原始尺寸,而不是显示尺寸。该插件会自动调整它们的大小(更小),以便行中的每个图像都具有相同的高度,并且行中的所有图像一起正好适合页面的宽度。(这个数学是我已经学过的最简单的部分。)

当Wordpress遇到一行中的第一个图像短码时,预计它将被一个真正的<img> 标签,但我还不知道应该显示多大的尺寸。也没有内置的方法让短代码解析器知道何时到达换行符。

I need to know how many image shortcodes are on a given line (in the "row") and use all of their dimensions together to calculate the desired size of each image before I\'m ready to replace the first shortcode in the row. 据我所知,Wordpress只能按照找到的顺序一次处理一个短代码,而且似乎没有一种简单的方法来判断换行符落在哪里。

解决方案

我是否忽视了一个简单的解决方案?理想的情况是。。。

  1. Leave the images easily separable -- 每幅图像使用一个标记,这样我就可以通过在行之间,甚至在帖子之间拖放来轻松地对它们进行重新排序(另外,正如我在下面的评论中提到的,我的实际短代码比我的示例要复杂得多,如果将它们组合成每行一个标记,则会非常笨拙)
  2. Use Wordpress\' built-in shortcode support -- 因为这是插件嵌入内容的首选方法,Wordpress已经为此内置了很好的解析工具Not require "parent" tags for each row of images -- 保持代码的简单性和灵活性,以便于将来的开发Remain as future-proof as possible -- e、 g.如果我为此编写自己的复杂正则表达式并重载do_shortcode() 那么,随着Wordpress的发展,这种情况在未来有更大的机会打破

    自己滚吧do_shortcode() 和/或修改(非常复杂的)regex模式(定义见get_shortcode_regex()) -- these are the kinds of creative solutions that I am most interested in[imgrow][img ...][img ...][/imgrow] -- 虽然这并不能真正回答所问的问题,但完全放弃了短代码工具,例如使用add_filter() -- 它在技术上保留了短代码语法,但放弃了所有好的工具(此时,这个问题的答案只是“目前不可能”)

1 个回复
SO网友:birgire

我认为引入短代码更容易[imgs] 可以这样使用:

 [imgs id="12,13,14" w="200,300,400" h="300,400,500"]
 [imgs id="19,20" w="50,60" h="80,100"]
然后,可以根据逗号(,)分解每个属性,并在相应的数组上循环。

结束

相关推荐

Use AJAX in shortcode

我有以下代码来显示随机引用的快捷码。问题:如何使按钮显示新的随机报价?我的意思是,这会点击按钮并显示一个新的报价(当然不会刷新页面)。function random_quote() { // quotes file $array = file(\"/path to txt file\"); // generate a random number between 0 and the total count of $array minus