从WordPress外部获取ShortCode属性

时间:2015-06-01 作者:Bondt

有没有一种干净的方法可以在Wordpress的默认行为之外获取短代码的属性值?我正在Wordpress安装之外编写一个脚本include(\'../wp-load.php\'); 在一开始。

就我而言,我希望"caption" 属性[caption] shortcode 我发现最好的方法如下,但我对此很不满意。

原帖子内容:

[caption id="attachment_1" align="alignleft" width="150" caption="I\'m a wicked cool banana"]<img src="http://banana.dev/uploads/2013/07/banana.jpg" alt="Banana" title="Banana" width="150" height="150" class="size-full wp-image-1" />[/caption]
从快捷码获取标题的脚本:

// prepare full content
$content = $content_post->post_content;
$content = apply_filters(\'the_content\', $content);
$content = str_replace(\']]>\', \']]&gt;\', $content);

// test the HTML and get the part inside
if (preg_match("/<p class=\\"wp-caption-text\\">(.*)<\\\\/p>/", $content, $matches)) {
  $caption = $matches[1];
}
但这不是最好的办法,不是吗?

请注意,我不是要获取图像的属性,而是要获取短代码的属性。

EDIT 1

正如s\\u ha\\u dum所建议的,我尝试使用get_shortcode_regex(), 但我得到了以下信息:

array (size=7)
  0 => 
    array (size=1)
      0 => string \'[caption id="attachment_1" align="alignleft" width="150" caption="I\'m a wicked cool banana"]<img src="http://banana.dev/uploads/2013/07/banana.jpg" alt="Banana" title="Banana" width="150" height="150" class="size-full wp-image-1" />[/caption]\' (length=394)
  1 => 
    array (size=1)
      0 => string \'\' (length=0)
  2 => 
    array (size=1)
      0 => string \'caption\' (length=7)
  3 => 
    array (size=1)
      0 => string \' id="attachment_1" align="alignleft" width="150" caption="I\'m a wicked cool banana"\' (length=206)
  4 => 
    array (size=1)
      0 => string \'\' (length=0)
  5 => 
    array (size=1)
      0 => string \'<img src="http://banana.dev/uploads/2013/07/banana.jpg" alt="Banana" title="Banana" width="150" height="150" class="size-full wp-image-1" />\' (length=169)
  6 => 
    array (size=1)
      0 => string \'\' (length=0)
这意味着我仍然需要Regex$匹配项才能得到我想要的结果。

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

不要试图解析短代码,然后对HTML进行正则化。使用get_shortcode_regex() 要分析原始帖子内容,请执行以下操作:

$content = $content_post->post_content;
preg_match_all("/$pattern/",$content,$matches);
然后爬行$matches 查找您的短代码数据。使用shortcode_parse_atts($matches[3][0]) (注意,$匹配[3][0]以给出匹配的短代码属性中的第一个元素)来分离属性字符串。

参考文献:
https://wordpress.stackexchange.com/a/73461/21376

结束

相关推荐

Shortcode not accepting atts

我一直在研究一个短代码,我在传递$ATT时遇到了问题。我不知道我做错了什么。换言之,我无法通过在短代码中插入新值将“input\\u product\\u image\\u ID”更新为与默认值13不同的值。例如,此短代码仍将返回13,而不是12:[product\\u picture input\\u product\\u image\\u ID=“12”]我的代码:function article_image_insert_shortcode($atts) { extract(short