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.
la source
the_content()
. Cependant, c'est plus difficile s'il y a déjà beaucoup de pages comme celle-ci.Réponses:
Ouvert à tous ceux qui peuvent simplifier cela, mais voici ce que j'ai trouvé qui a fonctionné pour moi.
La première chose est la première - obtenir la galerie, en utilisant
get_post_gallery()
, dès que la boucle commence:strip_shortcode_gallery()
Fonction - functions.phpRessources:
Stackoverflow:
Ce que je quittais à l'origine, qui n'a pas fonctionné comme prévu:
la source
Expressions régulières de shortcode de base
Fondamentalement, nous pouvons le faire avec une Regex - en fait même avec la Regex fournie par core par
get_shortcode_regex()
.Nous devons d'abord saisir les balises shortcode et construire une expression régulière. La fonction principale
get_shortcode_regex()
n'offre malheureusement aucune chance de lancer un argument, nous nous retrouverions donc avec une expression régulière qui correspond à chaque shortcode, ce qui n'est pas souhaité car nous voulons uniquement cibler le[gallery]
shortcode.Catch toutes les galeries
Ensuite, nous avons besoin d'une Regex qui attrape toutes les galeries. Par conséquent, nous appelons
preg_match_all()
car il renverra tous les correspondances pour le shortcode de la galerie sous forme de tableau avec un0
index (le reste sera des correspondances partielles et peut être ignoré).$galleries[0]
Contient maintenant un tableau de balises de shortcode de galerie.Le contenu sans galeries
La prochaine chose que nous devons faire est de supprimer tous les
[gallery]
shortcodes du contenu. Nous utiliserons à nouveau le même Regex et l'exécuteronsget_the_content()
. Bien sûr, nous appliquons lethe_content
filtre car un shortcode aurait pu être ajouté via un rappel au moment du rendu.La
$content
variable contient maintenant notre contenu.Exemple de rappel pour modifier le contenu
ou: Comment diviser le contenu en galeries et le reste du message
Nous pourrions facilement remplacer le contenu par notre nouveau contenu lors d'un rappel:
ce qui ajouterait d'abord toutes les galeries, puis ajouterait notre contenu sans galeries, tous deux séparés par une règle horizontale. Ce n'est qu'un point de départ.
la source
Cela ne devrait pas être trop compliqué. Le code ci-dessous peut être raccourci à quelques lignes à souhait.
Approche 1. Obtenez le contenu propre de la publication en supprimant tous les shortcodes, y compris celui de la galerie du contenu de la publication.
NB: tous les autres shortcodes seront supprimés de la publication. Si vous n'y placez pas de shortcodes personnalisés, alors l'approche est pour vous.
Supposons que vous êtes dans la boucle WP
Supposez que vous soyez absent
Approche 2. Supprimez uniquement les
[gallery]
shortcodes, conservez tous les autres shortcodes.S'appuie sur la réalisation interne de l'
[gallery]
apparence du shortcode, qui peut être modifiée par l'équipe WP, donc peut-être pas aussi à l'épreuve du temps que la 1ère approche:Dans la boucle WP
En dehors de ça
la source