Je ne suis pas sûr d'avoir posé la question correctement, excusez-moi! Ce que j'essaie de faire est de générer une balise <!--nextpage-->
via un shortcode. Mais cela ne fonctionne pas, je suppose, car les codes courts sont appliqués lors du rendu du contenu, alors que <!--nextpage-->
est résolu au préalable en liens. Est-ce que quelqu'un sait si cela peut être fait? Puis-je appliquer la balise <!--nextpage-->
via mon shortcode lors du rendu de l'article?
Je ne sais pas dans quel ordre exact les filtres sont appliqués à the_content();
et si c'est assez tôt, mais si cela ne fonctionne pas pour vous, je pense qu'il est prudent de supposer que vous avez raison de penser que le code abrégé est appliqué à en retard.
De /wp-includes/shortcodes.php
(ligne 296, wp 3.2.1), on peut voir que les codes courts sont naturellement résolus de la manière suivante:
add_filter('the_content', 'do_shortcode', 11); // AFTER wpautop()
Si vous exécutez do_shortcode
lorsque le hook the_posts
est exécuté, vous devez vous assurer qu’ils ont été exécutés suffisamment tôt. the_posts
est exécuté immédiatement après la récupération des publications dans la base de données. Ce qui suit devrait fonctionner:
add_filter('the_posts', 'rutwick_shortcode_exec');
function rutwick_shortcode_exec($posts) {
$post_count = count($posts);
for ($i = 0; $i < $post_count; ++$i) {
do_shortcode($posts[$i]->post_content);
}
return $posts;
}
Il se peut que réduire la priorité suffise:
add_filter('the_content', 'do_shortcode', 9);
Notons que je n’ai pas testé ce qui précède et que je ne garantis rien. Vous pouvez également rencontrer des conflits avec wpautop
, car si ce qui précède est appliqué, les codes courts (tous les codes courts!) Sont maintenant résolus avant qu’ils ne filtrent le contenu.
EDIT: Il serait peut-être plus sûr de lancer votre propre fonction de remplacement plus tôt (ce qui suit supposera que votre shortcode s'appelle [next]):
function do_rutwick_shortcode($content) {
$content = preg_replace('{\[next\]}','<!--nextpage-->',$content);
return $content;
}
et appelez-le en utilisant l’une des méthodes ci-dessus (c’est-à-dire raccordez-le à the_content
avec un numéro de priorité inférieur ou remplacez do_shortcode(...)
par do_rutwick_shortcode(...)
dans la boucle for
ci-dessus). Si vous choisissez de le faire, utiliser add_shortcode
devient superflu. De même, si vous optez pour l’accrochage dans the_posts
, le preg_replace
peut être exécuté directement dans ladite fonction, deux ne seront pas nécessaires, à savoir:
$posts[$i]->post_content =
preg_replace('{\[next\]}','<!--nextpage-->',$posts[$i]->post_content);
vous sauverait un appel de fonction.