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