WordPress Plugins auf Seiten deaktivieren

WordpressViele WordPress-Plugins erweitern automatisch die Artikel des Blogs um bestimmte Elemente. So bekommt man bequem Facebook-Like Buttons unter die Artikel, die Möglichkeit den Artikel zu bewerten oder Werbung für den Feed. Das ist verdammt nützlich, aber häufig fehlen Einstellungsmöglichkeiten, um die Plugins außerhalb von Artikeln oder auf bestimmten Seiten zu deaktivieren. In diesem Artikel werde ich erklären, wie man dies trotzdem hinbekommt.

Anwendungsbeispiel

Ich habe hier in meinem Blog kürzlich das an sich sehr praktische Plugin Sharexy installiert. Zwar kann man in den Einstellungen angeben, ob die Buttons oben oder unten eingeblendet werden sollen, aber eine Möglichkeit es auf Seiten zu deaktivieren, konnte ich nirgends finden. Ich nutze hier auf der Seite eine WordPress Installation, um mein Angebot als Webentwickler und den Blog darzustellen. Auf den Angebotsseiten empfinde ich die Share-Buttons als eher unseriös und wollte sie deaktivieren.

Ab in den Code!

Ohne eine praktische Einstellungsmöglichkeit muss man direkt an den Code des Plugins. Dieser befindet sich in einer Standardinstallation unter /wp-content/plugins/pluginname. Hier muss man jetzt eine Codezeile in dieser Form suchen und sich den Funktionsnamen raus kopieren:
add_filter('the_content', array(&$this, 'funktionsname'), ...);
Je nach Plugin kann sie auch so aussehen:
add_filter('the_content', 'funktionsname', ...);
Ein guter Ort um die Suche zu starten, ist die Hauptdatei des Plugins, die in der Regel so heißt, wie das Plugin selbst. Findet man dort nichts, muss man sich die anderen Dateien angucken.

Hat man nun den Funktionsnamen gefunden, muss man nach function funktionsname suchen. Der gefundene Code sollte etwa so aussehen (der Text in den runden Klammern kann je nach Plugin anders sein):
function funktionsname($content = '') {
...
...
}

Code ändern

Bevor man den Code ändert, sollte man eine Sicherheitskopie der Datei machen, die man ändert. Vergisst man hier nur ein Zeichen, kann es sein, dass der ganze Blog erst mal nicht mehr funktioniert.

Möchte man nun das Plugin in allen statischen Seiten deaktivieren, muss man den folgenden Code in die erste Zeile der Funktion setzen:
if (is_page()) return $content;
Das bewirkt, dass die Funktion den Inhalt der Seite unverändert zurück gibt. Das Ergebnis sieht dann in etwa so aus:
function funktionsname($content = '') {
if (is_page()) return $content;
...
...
}

Diesen Code kann man für verschiedene Anwendungsfälle auch abwandeln:

  • Plugin auf der Seite „Impressum“ deaktivieren:
    if (is_page('Impressum')) return $content;
  • Plugin auf den Seiten „Impressum“ und „Kontakt“ deaktivieren (kann beliebig fortgesetzt werden:
    if (is_page(array('Impressum','Kontakt'))) return $content;
  • Plugin auf der Startseite deaktivieren:
    if (is_front_page()) return $content;

Dies sind nur die wichtigsten Anwendungsfälle. Es gibt noch sehr viel mehr Möglichkeiten, die man im WordPress Codex nachlesen kann.

Fazit

Hat man die Angst vor dem Code erst mal verloren, kann man mit dieser kleinen Änderung fehlende Konfigurationsmöglichkeiten von Plugins nachrüsten. Hat man keine Programmiererfahrung, sollte man aber immer ein Backup parat haben, damit der Blog bei Fehlern weiterhin funktioniert. Hat man das Backup vergessen und nichts geht mehr, kann man das Plugin auch deaktivieren.

Habt ihr Probleme bei der Anwendung oder kennt ihr vielleicht einen einfacheren Weg, ein Plugin auf Seiten zu deaktivieren? Dann schreibt einfach eine Nachricht in die Kommentare.

14 Gedanken zu “WordPress Plugins auf Seiten deaktivieren
  1. Bin auf der Suche nach „WordPress Plugins nur auf bestimmten Seiten aktivieren“ auf diese Seite gestoßen.
    Es ärgert mich schon seit einiger Zeit, dass WordPress alle aktiven Plugins auf allen Seiten lädt, was die Ladegeschwindigkeit insbesondere der Startseite natürlich nicht erhöht, sondern eher vermindert.
    Manche Plugins werden nur auf einer bestimmten Seite benötigt. Daher suche ich nach einer Lösung, Plugins nur für bestimmte Seiten zu aktivieren.
    Dein Ansatz, Plugins auf bestimmten Seiten zu deaktivieren, ist sicherlich sehr gut, würde aber viel Arbeit machen.
    Ich möchte den Umkehrschluss, Plugins nur auf bestimmten Seiten zu aktivieren. Dass muss doch sicherlich auch irgendwie gehen, oder?

  2. Hallo Horst,

    eine übergeordnete WordPress-Funktion, sodass ein Plugin nur auf bestimmten Seiten aktiviert wird, wäre eine super Sache, gibt es soweit ich weiß aber nicht. Es ist Aufgabe des Plugins für eine Unterscheidung der Seiten eine entsprechende Funktion zur Verfügung zu stellen und die Rechenlast nicht unnötig hoch zu schrauben. Leider wird dies nicht immer gut umgesetzt. Mit dem Plugin P3 (http://wordpress.org/extend/plugins/p3-profiler/) kannst du die Last von einzelnen Plugins ermitteln und die Flaschenhälse ggf. austauschen.

    Wenn es dir nur darum geht, dass du nicht alle Seiten auflisten willst, auf denen das Plugin nicht angezeigt werden soll, kannst du meine Abfrage aus dem Artikel auch umdrehen. Dies geht in PHP mit einem Ausrufezeichen vor der eigentlichen Abfrage. Mit diesem Code kannst du ein Plugin beispielsweise nur auf der Seite „Kontakt“ aktivieren:
    if (!is_page(‚Kontakt‘)) return $content;

    Je nach Programmierung des Plugins kann es aber trotzdem sein, dass eine gewisse Rechenlast erzeugt wird.

    Ich hoffe, ich konnte dir helfen und wünsche dir ein schönes Wochenende.

    Jonas

  3. Schade, klappt bei mir nicht. Ich versuche Das Plugin cforms nur auf der Kontaktseite auszuliefern…. Trotz deiner Einstellung
    if (!is_page(‘schreiben-sie-uns’)) return $content;

    wird css und .js noch immer auf Jeder Seite geladen und PageSpeed ist noch immer am meckern 🙁

    Remove render-blocking JavaScript:
    http://www.[DOMAIN].de/wp-content/plugins/cforms/js/cforms.js
    Optimize CSS Delivery of the following:
    http://www.[DOMAIN].de/wp-content/plugins/cforms/styling/cforms2012.css
    http://www.[DOMAIN].de/wp-content/plugins/cforms/styling/calendar.css

    Irgendwelche Ideen?

    Benny

  4. Hi Benny,

    ja, diese Anleitung bezieht sich nur auf Änderungen im Content selbst, nicht auf JS und CSS-Einbindungen.

    Im Prinzip kannst du mit einem ähnlichen Verfahren auch nach JS und CSS suchen. Anstatt nach add_filter('the_content', 'funktionsname', ...); suchst du nach etwas in der folgenden Form:
    add_action('wp_enqueue_scripts', 'funktionsname');

    In der dazugehörigen Funktion fügst du dann in der ersten Zeile das hier ein:
    if (!is_page('schreiben-sie-uns')) return;

    Schönes Wochenende,
    Jonas

  5. Hi Jonas,
    vielen vielen Dank für deine super Hilfe!!!!

    Es hat tatsächlich funktioniert und meine Seite ist bei PageSpeed Insights nun bei 100 angelangt. Auch wenn es sich nicht sofort in bare Münze oder neue Besucher auszahlen lässt, so weiß ich zumindest, dass ich diese Baustelle nun mit gutem Gewissen schließen kann 🙂
    Sicherlich werde ich dieses Vorgehen in Zukunft auch noch bei anderen WordPress-Projekten nutzen, ohne stattdessen direkt ein komplettes Plugin zu deaktivieren.

    Vielen Dank
    Benny

  6. Hallo Jonas,

    danke auch von mir, der Tipp hat mich weitergebracht. Frage: ich würde gern das Pferd von hinten satteln, und folgende Regel aufstellen: das PlugIn erstmal grundsätzlich deaktivieren (mit deiner Formel), allerdings die Kontaktseite als AUSNAHME, auf der das Plugin ausgespielt wird, einfügen.
    Welchen Code muss ich hierzu nutzen?

    Viele Grüße,
    Kathrin

  7. Hallo Kathrin,

    das kannst du mit einer negierten Abfrage machen (beachte das Ausrufezeichen):
    if (!is_page('kontakt')) return $content;

    Also, wenn es nicht die Kontakt Seite ist, wird abgebochen. Den Namen der Seite musst du halt gegebenenfalls ersetzen.

    Schöne Grüße,
    Jonas

  8. Hallo Jonas,

    gleich eingesetzt und gleich geklappt. Prima, hab vielen Dank für den guten Tipp! 🙂

  9. Hi Jonas,
    der letzte Eintrag ist hier zwar schon eine Weile her und ich weiß nicht, ob Du dies überhaupt noch lesen wirst. Ich wollte Dir dennoch mitteilen, dass mir Dein Tipp nach tagelangem herumtüfteln ohne Erfolg wirklich geholfen hat.

    Gesegnet sei das Internet und gesegnet seien solche netten Leute wie Du, die bereit sind, Ihr Wissen weiterzugeben und so anderen wirklich das Leben ein wenig leichter zu machen.

    Vielen Dank und eine schöne Zeit noch
    Andreas!

  10. Hi Andreas,

    vielen Dank für deinen Kommentar. Ich bekomme immer eine Nachricht, wenn es einen neuen Kommentar gibt und freue mich auch noch nach ein paar Jahren jedes Mal, wenn mein Artikel jemandem geholfen hat.

    Gesegnet seien Leute wie du, die sich für jede Hilfe bedanken und damit Leuten die Motivation geben weiterhin zu helfen 😉

    Schöne Grüße,
    Jonas

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.