web-dev-qa-db-ja.com

Wordpressの外部でショートコード属性を取得する

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];
}

しかし、これは最善の方法ではありませんね。

イメージの属性を取得するのではなく、ショートコードの属性を取得するようにしていることに注意してください。

編集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]を正規表現する必要があることを意味します。

1
Bondt

ショートコードを解析してから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]を使用して、一致した要素内の最初の要素を指定します属性文字列を引き離す.

参照:
https://wordpress.stackexchange.com/a/73461/21376

2
s_ha_dum