web-dev-qa-db-fra.com

Rechercher du contenu pour les codes courts et obtenir des paramètres

Dans le contenu, je peux avoir plusieurs shortcodes comme [book id="1"] [book id="14" page="243"]

Existe-t-il une méthode d'aide avec laquelle je peux rechercher le contenu de ce shortcode et obtenir ses paramètres? Je dois obtenir des identifiants pour pouvoir appeler WP_Query et ajouter les titres Custom Post Types à la fin.

function filter_books( $content ) {

// get all shortcodes IDs and other parameters if they exists
...

return $content;
}
add_filter( 'the_content', 'filter_books', 15 );

J'ai essayé d'utiliser le code suivant mais var_dump ($ matches) est vide et si cela fonctionne, je ne sais pas comment obtenir les paramètres ( https://stackoverflow.com/questions/23205537/wordpress -shortcode-filtrage-le-contenu-modifie-tous-les-messages-dans-une-liste )

  $shortcode = 'book';
  preg_match('/\['.$shortcode.'\]/s', $content, $matches);
1
Marko

Cela fonctionne pour moi

  $shortcode = 'book';
  $pattern = get_shortcode_regex();

  // if shortcode 'book' exists
  if ( preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches )
    && array_key_exists( 2, $matches )
    && in_array( $shortcode, $matches[2] ) )  {
   $shortcode_atts = array_keys($matches[2], $shortcode);

 // if shortcode has attributes
 if (!empty($shortcode_atts)) {
  foreach($shortcode_atts as $att) {
    preg_match('/id="(\d+)"/', $matches[3][$att], $book_id);

    // fill the id into main array
    $book_ids[] = $book_id[1];
  }
}
...
0
Marko

il existe en fait un moyen beaucoup plus simple pour y parvenir. Lorsque le contenu est analysé par WP, il exécute les codes courts trouvés dans le contenu. À partir de WP 4.7, un nouveau filtre, do_shortcode_tag est déclenché lorsqu'un code court est remplacé par son contenu. Ceci est vraiment utile pour ajouter du contenu supplémentaire à la sortie du shortcode en fonction des attributs trouvés.

add_filter( 'do_shortcode_tag','add_my_script',10,3);
function enqueue_my_script($output, $tag, $attr){
  if('aShortcode' != $tag){ //make sure it is the right shortcode
    return $output;
  }
  if(!isset($attr['id'])){ //you can even check for specific attributes
    return $output;
  }
  $output.='<script> ... </script>';
  return $output;
}

sinon, si vous devez mettre quelque chose dans le pied de page de votre page, vous pouvez accrocher l’action wp_footer dans la fonction ci-dessus, soit un fonction anonyme ou activer une autre fonction dans votre fichier.

0
Aurovrata