Existe-t-il un moyen de diviser le contenu du message et le code court de la galerie. Je souhaite afficher la galerie en dehors de mon contenu normal, peu importe comment ou où elle est placée. Je peux l'utiliser pour obtenir le shortcode lui-même:
if(has_shortcode(get_the_content(), 'gallery')){
$pattern = get_shortcode_regex();
preg_match("/$pattern/s", get_the_content(), $matches);
echo do_shortcode($matches[0]);
}
Mais cela ne fonctionne pas si le code court de la galerie n'est pas la première instance. Existe-t-il un moyen de diviser complètement mon contenu et ma galerie?
Edit: J'ai une semi-solution mais cela semble être un long chemin à parcourir. Il saisit d'abord le premier shortcode dans le post (qui doit être corrigé car je ne veux que le shortcode "Gallery") puis supprime tous les shortcodes du contenu (encore une fois, pas vraiment ce que je veux faire.
<?php if(has_shortcode(get_the_content(), 'gallery')) : ?>
<?php
$pattern = get_shortcode_regex();
preg_match("/$pattern/s", get_the_content(), $matches);
?>
<div id="content">
<?php echo strip_shortcodes(get_the_content()); ?>
</div>
<div id="gallery">
<?php echo do_shortcode($matches[0]); ?>
</div>
<?php endif; ?>
Edit # 2 - Ok, je n'ai pu obtenir que les shortcodes de la galerie dans le post. J'ai également ajouté un filtre pour supprimer le formulaire de shortcode de la galerie the_content()
- le problème est qu'il ne supprime pas nécessairement le shortcode car il le publie, mais ne me permet pas d'exécuter "do_shortcode ()"
Functions.php
function remove_gallery($content) {
global $post;
if($post->post_type == 'artcpt')
remove_shortcode('gallery', $content);
return $content;
}
add_filter( 'the_content', 'remove_gallery', 6);
La boucle
<?php preg_match('/\[gallery ids=[^\]]+\]/', get_the_content(), $matches); ?>
<div id="content">
<?php the_content(); ?>
</div>
<div id="gallery">
<?php echo do_shortcode($matches[0]); ?>
</div>
dans The Loop, il renverra mon code court deux fois (je suis sur une seule page, devrait être bouclé deux fois - donc il ne fonctionne pas do_shortcode ()). Pas certain de pourquoi.
the_content()
. Cependant, c'est plus difficile s'il y a déjà beaucoup de pages comme celle-ci.