web-dev-qa-db-fra.com

Obtenir l'attribut shortcode en dehors de Wordpress

Existe-t-il un moyen simple d’obtenir la valeur de l’attribut d’un shortcode en dehors du comportement par défaut de Wordpress? Je travaille sur un seul script en dehors d'une installation Wordpress, où je ne fais que include('../wp-load.php'); au début.

Dans mon cas, je cherche à obtenir l'attribut "caption" à partir du [caption] shortcode et j'ai trouvé le meilleur moyen de l'être, comme suit, mais je suis très mécontent de cela.

Contenu de l'article original:

[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]

Mon script pour obtenir la légende du shortcode:

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

Mais cela ne peut pas être le meilleur moyen, n'est-ce pas?

Veuillez noter que je ne cherche pas à obtenir les attributs de l'image, mais les attributs du shortcode.

EDIT 1

Comme suggéré par s_ha_dum, j'ai essayé d'obtenir le shortcode avec get_shortcode_regex(), mais j'ai ensuite obtenu ce qui suit:

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)

Ce qui signifie que je dois toujours utiliser Regex $ matches [3] pour obtenir le résultat souhaité.

1
Bondt

N'essayez pas d'analyser les codes courts, puis de regex le code HTML. Utilisez get_shortcode_regex() pour analyser le contenu brut de la publication:

$content = $content_post->post_content;
preg_match_all("/$pattern/",$content,$matches);

Puis explorez $matches pour trouver vos données de shortcode. Utilisez shortcode_parse_atts($matches[3][0]) (note ) correspond à [3] [0] pour donner le premier élément de la correspondance les attributs de shortcode) pour séparer la chaîne d'attribut.

Référence:
https://wordpress.stackexchange.com/a/73461/21376

2
s_ha_dum