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(']]>', ']]>', $content);
// test the HTML and get the part inside
if (preg_match("/<p class=\"wp-caption-text\">(.*)<\\/p>/", $content, $matches)) {
$caption = $matches[1];
}
しかし、これは最善の方法ではありませんね。
イメージの属性を取得するのではなく、ショートコードの属性を取得するようにしていることに注意してください。
編集1
S_ha_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)
これは、私が望む結果を得るためには、まだ$ matches [3]を正規表現する必要があることを意味します。
ショートコードを解析してからHTMLを正規表現しようとしないでください。生の投稿コンテンツを解析するには、 get_shortcode_regex()
を使用します。
$content = $content_post->post_content;
preg_match_all("/$pattern/",$content,$matches);
次に$matches
をクロールして、自分のショートコードデータを見つけます。 shortcode_parse_atts($matches[3][0])
(note$ matches [3] [0]を使用して、一致した要素内の最初の要素を指定します属性文字列を引き離す.