Content in einem Artikel verstecken [WordPress]
Wieder was dazu gelernt… In einem WordPress-Artikel wollte ich einen bestimmten Inhalt anders darstellen, wenn der Besucher über einen bestimmten Link auf den Artikel gelangt. Ich dachte erst daran, einfach den Artikel zu kopieren und den Inhalt entsprechend abzuändern. Allerdings wäre dann der Artikel auch zweimal auf der Startseite und in der Suche aufgetaucht. Dann dachte ich daran, den Artikel als Seite zu erstellen. Dadurch wäre die Seite jedoch in meiner Navigation aufgetaucht, was ich ebenfalls nicht wollte.
Ein Freund hat mir die folgenden beiden Alternativen vorgeschlagen:
Verhindern, dass die Seite im Menü erscheint
Dies ist mit dem Plugin Exclude Pages möglich. Mit diesem Plugin kann man zu jeder Seite entscheiden, ob sie im Menü erscheinen soll, oder nicht. Ich habe diese Option nicht ausprobiert, denke jedoch, dass sie funktioniert hätte.
Shortcode erstellen
Mit folgendem kleinen Coding in der functions.php im Childe-Theme-Verzeichnis ist es möglich, Absätze auszublenden, wenn der Link eine bestimmte Variable enthält.
function hidevar_shortcode( $atts, $content = null ) { extract( shortcode_atts( array( 'varname' => '', ), $atts ) ); if(!empty($varname) && !empty($_REQUEST[$varname])) { return false; } else { return $content; } } add_shortcode( 'hidevar', 'hidevar_shortcode' );
Anwendung im Content
[hidevar varname='test']Dieser Text soll ggf. verschwinden[/hidevar]
Wenn Du jetzt die Seite mit
www.tricktresor.com/blog/mein-artikel/?test=yes
aufrufst wird der entsprechenden Text zwischen den Shortcode-Klammern verschwinden Und zwar egal was Du an Wert übergibst, denn derzeit wird nur geprüft, ob die Variable einen Wert besitzt.
Update
Mit irgendeinem WP-Update wurde die shortcode API geändert:
https://make.wordpress.org/core/2015/07/23/changes-to-the-shortcode-api/
Das hat zur Folge, das der oben genannte Trick so nicht mehr funktioniert. Normaler Inhalt wird weiterhin korrekt angezeigt bzw. ausgeblendet. Wenn du jedoch andere Shortcodes innerhalb von [hidevar] verwendest, dann funktioniert das nicht mehr.
Die Lösung: Der übergebene Inhalt muss einmal aufbereitet werden:
https://developer.wordpress.org/reference/functions/do_shortcode/
Anstelle von
return $content;
muss es nun heißen:
return do_shortcode($content);
- Interview mit Björn Schulz (Software-Heroes.com) - 3. September 2024
- Daten aus ALV ermitteln - 3. September 2024
- So lange es den SAPGUI noch gibt… - 27. Juni 2024