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.
quelle
the_content()
. Schwieriger, wenn es schon viele solche Seiten gibt.Antworten:
Offen für alle, die dies vereinfachen können, aber das, was ich mir ausgedacht habe, hat mir geholfen.
Das erste ist das erste - holen Sie sich die Galerie mit
get_post_gallery()
, sobald die Schleife beginnt:strip_shortcode_gallery()
Funktion - functions.phpRessourcen:
Paketüberfluss:
Was ich ursprünglich gemacht habe, was nicht wie erwartet funktioniert hat:
quelle
Core Shortcode reguläre Ausdrücke
Grundsätzlich können wir das mit einem Regex machen - eigentlich sogar mit dem von core by bereitgestellten Regex
get_shortcode_regex()
.Zuerst müssen wir die Shortcode-Tags greifen und einen regulären Ausdruck erstellen. Die Kernfunktion
get_shortcode_regex()
bietet leider keine Möglichkeit, ein Argument einzubringen, sodass wir eine Regex haben, die jedem Shortcode entspricht, was unerwünscht ist, da wir nur auf den[gallery]
Shortcode abzielen möchten .Fange alle Galerien
Als nächstes brauchen wir einen Regex, der alle Galerien fängt. Daher rufen wir auf,
preg_match_all()
da es alle Übereinstimmungen für den Galerie-Shortcode als Array mit einem0
Index zurückgibt (der Rest wird teilweise übereinstimmen und kann ignoriert werden).$galleries[0]
Enthält jetzt eine Reihe von Galerie-Shortcode-Tags.Der Inhalt ohne Galerien
Als nächstes müssen wir alle
[gallery]
Shortcodes aus dem Inhalt entfernen . Wir werden den gleichen Regex erneut verwenden und ihn ausführenget_the_content()
. Natürlich wenden wir denthe_content
Filter an, da der Shortcode beim Rendern durch einen Rückruf hinzugefügt werden könnte.Die
$content
Variable enthält jetzt unseren Inhalt.Beispiel für einen Rückruf, um den Inhalt zu ändern
oder: Wie Sie den Inhalt in Galerien und den Rest des Beitrags aufteilen können
Wir könnten den Inhalt während eines Rückrufs einfach durch unseren neuen Inhalt ersetzen:
Das würde zuerst alle Galerien hinzufügen, dann unseren Inhalt ohne Galerien, beide durch eine horizontale Linie getrennt. Dies ist nur ein Ausgangspunkt.
quelle
Es sollte nicht sooo kompliziert sein. Der folgende Code kann auf Wunsch auf ein paar Zeilen gekürzt werden.
Vorgehensweise 1. Entfernen Sie alle Shortcodes, einschließlich der Galerie 1, aus dem Inhalt des Beitrags, um den Inhalt des sauberen Beitrags zu erhalten.
NB: Alle anderen Shortcodes werden von der Post entfernt. Wenn Sie dort keine benutzerdefinierten Shortcodes platzieren, ist der Ansatz der richtige für Sie.
Angenommen, Sie befinden sich in der WP-Schleife
Angenommen, Sie sind unterwegs
Ansatz 2. Nur entfernen
[gallery]
Shortcode , alle anderen Shortcodes beibehalten.Verlässt sich auf die interne Erkenntnis, wie der
[gallery]
Shortcode aussieht, der vom WP-Team geändert werden kann, sodass er möglicherweise nicht so zukunftssicher ist wie der erste Ansatz:In der WP-Schleife
Heraus
quelle