我使用短代码在我的Wordpress模板上显示我的图像。
[photo id="13927101803" caption="Some text"] // Flickr
[photo id="mqEqHAC3rK"] // Instagram, no caption
因为我在Markdown中写了我的帖子,当我要包含10张或更多照片时,写这些[attr =" ibutes"]会很无聊。 这就是为什么我希望简化这些照片的原因包括:
[13927101803 "Caption"] // Flickr
[mqEqHAC3rK] // Instagram
// Causes a conflict with the links in Markdown [this is](http://a-link)… ?
当我保存帖子时,它会运行一个检测短代码的钩子,调用Flickr / Instagram API获取源图像URL并将其存入数据库(每个帖子的每张照片数组)。
以下是我当前捕获短代码的代码:http://pastebin.com/TVEQKudg
有什么方法可以简化这些来电?或者另一个想法是快速调用它并且不使用这些长短代码?
答案 0 :(得分:2)
好的,你走了:
/\[(\d{11}|\w{10})(?:\s*"([^"]+)")?\]\/
让我们说你有这样的内容:
简单测试[13927101801“标题”] [mqEqHAC3rK“标题”]简单 测试简单测试简单测试简单测试简单测试a 简单测试简单测试[13927101801]
然后你可以这样做:
$content = do_shortcode(get_the_content());
preg_match_all('/\[(\d{11}|\w{10})(?:\s*"([^"]+)")?\]\/', $content, $matches);
$matches = array_slice($matches, 1);
$matches = call_user_func_array( 'array_map', array_merge(array(NULL), $matches) );
var_dump($matches);
<强>输出:强>
array (size=3)
0 =>
array (size=2)
0 => string '13927101801' (length=11) // <-- ID
1 => string 'Caption' (length=7) // <-- Caption content
1 =>
array (size=2)
0 => string 'mqEqHAC3rK' (length=10) // <-- ID
1 => string 'caption' (length=7) // <-- Caption content
2 =>
array (size=2)
0 => string '13927101801' (length=11) // <-- ID
1 => string '' (length=0) // <-- No Caption content
您将获得id
和(可选)caption