WordPress: Abfragen, ob Shortcodes auf der Seite verwendet werden
Mit einer speziellen Abfrage vor Ausgabe des Inhalts kann geprüft werden, ob Shortcodes im Inhaltsbereich verwendet wurden.
Es gibt Situationen beim Erstellen einer WordPress-Website, in denen möchten wir Entscheidungen von der Verwendung bestimmter Shortcodes im Inhaltsbereich abhängig machen. Mitunter sollen ganze Module nur dann angezeigt werden, wenn bestimmte Shortcodes im Einsatz sind.
Um darauf adäquat zu reagieren, kann vor der Ausgabe des Inhalts abgefragt werden, ob der Shortcode in diesem Beitrag bzw. in der Seite verwendet wird.
Verwendung von Shortcodes prüfen
Zum Prüfen, ob ein Shortcode in einem bestimmten Zusammenhang Verwendung findet, dient die WordPress-Funktion has_shortcode
. Diese erwartet jeweils Strings für die Parameter $content
(der Inhalt) und $tag
(der Shortcode). Mit einer if- oder if/else-Abfrage in der entsprechenden Template-Datei (single.php
, page.php
, home.php
etc) lassen sich dann verschiedene Abhängigkeiten darstellen.
if (has_shortcode($post->post_content, 'beispiel')) {
echo "Der Shortcode [beispiel] wurde in diesem Beitrag verwendet.";
} else {
echo "Der Shortcode [beispiel] wurde in diesem Beitrag nicht verwendet.";
}
Beispiel: Alternatives Layout, wenn der Shortcode für ein Inhaltsverzeichnis verwendet ist
Schauen wir uns ein Beispiel an. Wir haben das Layout mit CSS Grid gestaltet. Wenn im Inhalt der Shortcode inhaltsverzeichnis
verwendet wurde, soll die CSS-Klasse .has-sidebar
auf den Artikel angewendet werden, damit das Inhaltsverzeichnis in einer Seitenleiste angezeigt werden kann.
<?php
// Two columns if shortcode [inhaltsverzeichnis] is used
// Centered content without toc
if( is_single() && has_shortcode( $post->post_content, 'inhaltsverzeichnis') ) { ?>
<article <?php post_class('content has-toc'); ?>>
<?php } else { ?>
<article <?php post_class('content is-centered'); ?>>
<?php } ?>
<?php
// Display content
if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php the_content();?>
<?php endwhile; else: ?>
<?php echo "Keine Inhalte"; ?>
<?php endif; ?>
</article>
Auf unserer eigenen Website realisieren wir mit dieser Technik verschiedene Layouts für Blog-Posts und FAQ, je nachdem, ob ein Inhaltsverzeichnis vorhanden ist oder nicht.