Gibt es eine Möglichkeit, den Inhalt des Posts und den Funktionscode der Galerie aufzuteilen? Ich möchte die Galerie außerhalb meines normalen Inhalts anzeigen, egal wie oder wo sie platziert ist. Ich kann dies verwenden, um den Shortcode selbst zu erhalten:
if(has_shortcode(get_the_content(), 'gallery')){
$pattern = get_shortcode_regex();
preg_match("/$pattern/s", get_the_content(), $matches);
echo do_shortcode($matches[0]);
}
Dies funktioniert jedoch nicht, wenn der Funktionscode der Galerie nicht die erste Instanz ist. Gibt es eine Möglichkeit, meinen Inhalt und meine Galerie vollständig aufzuteilen?
Edit: Ich habe eine halbe Lösung, aber es scheint ein langwieriger Weg zu sein, um es zu tun. Zuerst wird der erste Shortcode in der Nachricht erfasst (der behoben werden muss, da ich nur den Shortcode "Galerie" möchte), dann werden alle Shortcodes aus dem Inhalt entfernt (wieder nicht wirklich das, was ich tun möchte).
<?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; ?>
Bearbeiten # 2 - Ok, ich konnte nur Galerie-Shortcodes in der Post erhalten. Ich habe auch einen Filter hinzugefügt, um das Galerie-Shortcode-Formular zu entfernen. Das the_content()
Problem ist, dass der Shortcode nicht unbedingt entfernt wird, da er veröffentlicht wird, aber ich nicht "do_shortcode ()" ausführen kann.
Funktionen.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);
Die Schleife
<?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>
in der Schleife gibt es zweimal meinen Kurzcode zurück (ich bin auf einer einzelnen Seite, sollte zweimal wiederholt werden - daher wird do_shortcode () nicht ausgeführt). Nicht sicher warum.
the_content()
. Schwieriger, wenn es schon viele solche Seiten gibt.