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);
Enno Wulff
Letzte Artikel von Enno Wulff (Alle anzeigen)