Support » Plugins » Plugin bearbeiten bzw. ändern

  • Gelöst sina2008

    (@sina2008)


    Hallo,

    ich möchte ein Plugin ändern. Allerdings denke ich, es ist nicht o.k., wenn ich das in der Original-Datei im Plugin-Ordner tue.

    Frage:
    Wie kann ich Änderungen am Plugin vornehmen?

    Situation:
    Theme: paracord, child von storefront
    Plugin, das geändert werden soll: TB search in menu -> Plugin-Verzeichnis= tb-search-in-menu
    Datei im Plugin-Verzeichnis, die geändert werden soll: tb-search-in-menu.php
    WordPress Version: 5.6
    Weitere aktive Plugins:
    Woocommerce, V. 4.8.0
    Germanized für WooCommerce, V. 3.3.3

    Das habe ich bisher versucht:
    1. Im Verzeichnis meines child-themes ein Verzeichnismit dem Namen „tb-search-in-menu“ angelegt (entspricht dem Original-Pluginverzeichnis-Namen).
    2. Dorthin nur die Datei, die geändert werden soll, kopiert: tb-search-in-menu.php
    3. Änderungen vorgenommen und Datei aktualisiert.
    => Ergebnis: funktioniert nicht. Es wird die Original-Datei aus dem Pluginverzeichnis genommen.
    4. Geänderte Datei ins Original-Pluginverzeichnis hochgeladen.
    => Ergebnis: funktioniert – ist mir aber zu unsicher. Ich möchte Änderungen nicht in Originaldateien machen.

    Danke für Eure Unterstützung und Grüße
    Sina

    • Dieses Thema wurde geändert vor 2 Wochen von sina2008.

    Die Seite, für die ich Hilfe brauche: [Anmelden, um den Link zu sehen]

Ansicht von 8 Antworten - 1 bis 8 (von insgesamt 8)
  • Moderator Hans-Gerd Gerhards

    (@hage)

    Hallo,
    grundsätzlich ist das möglich, aber du solltest dabei bedenken, dass in dem Fall keine Updates des Originalplugins mehr greifen. Das ist insbesondere dann kritisch, wenn sich bei dem Plugin irgendwann mal herausstellt, dass es eine Sicherheitslücke hat.
    Sonst: Plugin runterladen und entpacken, den Ordnernamen ändern, den Dateinamen ändern und dann im oberen Bereich ändern in der Art wie folgt:

    /**
     * Plugin Name:       Meine Suche im Menu
     * Plugin URI:        http://theme.blue/plugins/search-in-menu
     * Description:       This plugin adds a search item in the nav menu of your choice
     * Version:           1.0.0
     * Author:            theme.blue
     * Author URI:        http://theme.blue
     * License:           GPL-2.0+
     * License URI:       http://www.gnu.org/licenses/gpl-2.0.txt
     * Text Domain:       meine-suche-im-menu
     * Domain Path:       /languages
     */
    

    Aber noch mal: ich würde das nicht machen. Vor allem ist das Plugin vor 5 Jahren (!) das letzte Mal upgedatet worden. Suche dir lieber ein ähnliches Plugin im Repository
    Viele Grüße
    Hans-Gerd

    Moderator Bego Mario Garde

    (@pixolin)

    Bei Themes kannst du als Ergänzung zu einem Theme ein „Child Theme“ erstellen. Ein „Child-Plugin“ gibt es aber nicht. Da kannst du nur entweder ein Plugin komplett deaktivieren und statt dessen dein eigenes Plugin schreiben oder einzelne Funktionen überschreiben. Dazu ein (stark vereinfachtes) Beispiel:

    Nehmen wir an, ein Plugin „Mit viel Liebe“ fügt mit einer Funktion im Footer der Webseite die Bemerkung „Mit viel Liebe gemacht.“ hinzu. Daraus möchtest du stattdessen „Schon wieder eine liebevoll gestaltete Website von mir.“ machen.

    Das Plugin verwendet zum Einbinden einen Filter, damit die Ausgabe der Funktion an der richtigen Stelle erfolgt:

    add_action( 'wp_footer', 'mit_viel_liebe' );
    function mit_viel_liebe() {
      echo 'Mit viel Liebe gemacht';
    }

    Um das zu überschreiben, solltest du erst einmal prüfen, ob die Funktion existiert (damit keine Fehler produziert werden, wenn jemand das Plugin „Mit viel Liebe“ deaktiviert):

    if( function_exists( 'mit_viel_liebe' ) {
      // mach irgendwas
    }

    Die auskommentierte Zeile // mach irgendwas können wir gleich mit der Ausgabe der neuen Zeichenkette ersetzen:

    if( function_exists( 'mit_viel_liebe' ) {
      echo 'Schon wieder eine liebevoll gestaltete Website von mir.';
    }

    Nun soll das ja auch wieder im Footer ausgegeben werden. Also verwenden wir einen Hook, wie ihn das andere Plugin ja auch genutzt hat. Nur nehmen wir hier einen eigenen Funktionsnamen:

    add_action( 'wp_footer', 'kreativ_gestaltet' );
    function kreativ_gestaltet() {
      if( function_exists( 'mit_viel_liebe' ) {
        echo 'Schon wieder eine liebevoll gestaltete Website von mir.';
      }
    }

    Allerdings wird jetzt unser eigener Text zusammen mit dem Text aus dem anderen Plugin ausgegeben. Damit das nicht mehr passiert, müssen wir die Verknüpfung der Funktion mit_viel_liebe() mit dem Hook wp_footer aufheben:

    remove_action( 'wp_footer', 'mit_viel_liebe' );

    Das können wir in unsere Funktion packen:

    add_action( 'wp_footer', 'kreativ_gestaltet' );
    function kreativ_gestaltet() {
      if( function_exists( 'mit_viel_liebe' ) {
        remove_action( 'wp_footer', 'mit_viel_liebe' );
        echo 'Schon wieder eine liebevoll gestaltete Website von mir.';
      }
    }

    Damit haben wir diese eine Funktion des Plugins Mit viel Liebe mit einer eigenen Funktion überschrieben, während alle weiteren Funktionen normal weiterlaufen.

    Nicht alle Funktionen eines Plugin werden über Hooks eingebunden und oft werden Funktion von anderen Funktionen genutzt, was einen Austausch erschwert oder unmöglich macht. Im günstigen Fall hat der Plugin-Entwickler die Funktionen überschreibbar gemacht, in dem er für jede Funktion prüft, ob sie bereits woanders definiert wurde:

    if(! function_exists( 'name_der_funktion' ) ) {
      function name_der_funktion() {
        // Code
      }
    }

    in dem Fall kannst du in einem Plugin dann einfach eine eigene Funktion mit dem gleichen Namen schreiben, die dann die Aufgabe übernimmt.

    sina2008

    (@sina2008)

    Vielen Dank für Eure schnelle und ausführliche Antwort!
    Ich muss evtl. einen ganz neuen Ansatz – am besten ohne Plugin – finden.

    @hage
    Das entspricht ungefähr dem, was ich mir vorgestellt habe. Allerdings mache ich mich lieber erst nochmal auf die Suche nach einem aktuellen Plugin. Danke für den Hinweis.

    @pixolin
    Danke für die Ausführungen. Daran kann ich lernen!

    Sina

    • Diese Antwort wurde geändert vor 2 Wochen von sina2008.
    Moderator Bego Mario Garde

    (@pixolin)

    Ich hoffe, ich habe es nicht zu kompliziert erklärt.
    Wenn du den Eindruck hast, dass deine Frage beantwortet wurde, sei bitte noch so nett und markiere den Thread als „gelöst“. Anderenfalls kannst du gerne nachfragen.

    Die Schlussfolgerung, einen anderen Ansatz auszuprobieren, kann übrigens auch ein wünschenswertes Ergebnis sein. Mir sind Änderungen manchmal auch zu aufwendig, welbst wenn sie technisch sicher machbar wären. Irgendwie soll es sich ja „rechnen“. 🙂

    Moderator Hans-Gerd Gerhards

    (@hage)

    Hallo Bego,
    Chapeau 🙏 übrigens für diese Supererklärung und Lösung. Meine Lösung ist dagegen eher die Holzhammermethode.
    Schönen Abend
    Hans-Gerd

    Moderator Bego Mario Garde

    (@pixolin)

    … mussten zuhause auch alle wieder „still sein, Papa schreibt wieder was im Forum“ … 🙈

    sina2008

    (@sina2008)

    Ich habe nun nach besseren Plugins gesucht und AJAX Search for WooCommerce gefunden.

    Die Suche habe ich nun wieder als Menüpunkt eingebunden. Ich musste dabei bei DESIGN -> Menu den neuen Menüpunkt ‚AJAX search bar‘ noch bearbeiten, damit diese Suche auch auf dem Handy funktioniert.

    Ich habe nun eine sehr gute Lösung gefunden.

    Vielen Dank nochmals!
    Sina

    • Diese Antwort wurde geändert vor 2 Wochen von sina2008.
    sina2008

    (@sina2008)

    @pixolin
    Deine Ausführungen sind prima und waren keinesfalls vergebens! Ich nehme das als Lernbeispiel für mich.

    Grüße an die Kinder – Papa macht das toll!!!

    Einen schönen Abend allerseits.

    Sina

Ansicht von 8 Antworten - 1 bis 8 (von insgesamt 8)