简化Wordpress短代码(或:“自定义短代码”)

时间:2014-04-22 10:18:39

标签: php regex wordpress preg-match

我使用短代码在我的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

有什么方法可以简化这些来电?或者另一个想法是快速调用它并且不使用这些长短代码?

1 个答案:

答案 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

的数组