Support » Allgemeine Fragen » Funktion aus ‚function.php‘ in Snipper überschreiben

  • Gelöst radarin

    (@radarin)


    Hallo zusammen.
    Ich habe mir für eine weitere Webseite das Theme ‚Responsive‘ ausgesucht (wobei der Name irreführend ist, auf dem Handy ;).

    Die Social Icons werden über eine Funktion generiert. Da ich die Seiten in einem neuen Fenster öffnen will, musste die Funktion angepasst werden. Dafür habe ich sie unter selbem Namen in ein Snippet kopiert. Das scheint WP aber gar nicht zu mögen.

    Schwerwiegender Fehler : readclare responsive_get_social_icons () (zuvor in /home/domain/www/kunde/wp-content/plugins/code-snippets/php/snippet-ops.php(433) deklariert: eval () 'd code: 3 ) in /home/domain/www/kunde/wp-content/themes/responsive/core/includes/functions-extentions.php in Zeile 320

    Liegt das möglicherweise am Theme, oder darf ich grundsätzlich nicht so vorgehen? Wenn ich die Funktion im Parent Theme lösche ist das Problem behoben. Bis zum nächsten Update. Ich hab deshalb im Child Theme den Namen der Funktion geändert.

    Euch Allen frohe Festtage. Gruss René.

Ansicht von 10 Antworten - 1 bis 10 (von insgesamt 10)
  • Hallo,

    welchen Code hast du benutzt?

    Die gängigste Methode um Funktionen aus dem parent ins child zu bekommen, wäre mit ! function_exists oder per remove action und add action, wenn es sich um eine action handelt. (https://code.tutsplus.com/tutorials/a-guide-to-overriding-parent-theme-functions-in-your-child-theme–cms-22623)

    Dazu müsste man den Code näher betrachten.

    PS: Du benutzt da ein plugin um PHP Code einzuschleussen? Benutze dafür ausschließlich das ChildTheme , so meine Empfehlung.

    Im Theme Responsive ist die Funktion responsive_get_social_icons() leider nicht pluggable (d.h. es wird nicht mit if( ! function_exists() ) abgefragt, ob die Funktion bereits in einem Child Theme existiert) und wird auch leider nicht mit einem Hook per add_action() eingebunden. Du kannst aber das Template footer.php so ändern, dass eine andere Funktion aufgerufen wird.

    Statt

    <div class="grid col-380 fit">
      <?php echo responsive_get_social_icons() ?>
     </div><!-- end of col-380 fit -->

    rufst du z.B. eine eigene Funktion auf:

    <div class="grid col-380 fit">
      <?php echo rene_get_social_icons() ?>
     </div><!-- end of col-380 fit -->

    Den Funktionsnamen verwendest du dann in der functions.php des Child-Themes.

    Die Empfehlung von @espiat, für eigenen PHP-Code kein Plugin zu verwenden, kann ich nicht ganz nachvollziehen. Vielleicht mag er dazu noch etwas schreiben? Aber wenn du ohnehin ein Child Theme anlegen musst, um das Template auszutauschen, wäre es tatsächlich Unfug, zusätzlich ein Plugin zu erstellen.

    @radarin Was ist denn an dem Theme-Namen irreführend? Das Theme ist im besten Sinne des Erfinders responsive.

    Thread-Starter radarin

    (@radarin)

    Danke für Eure Hintergrundinformationen. Dann liegts also am Theme. Ich hab das Snippet Plugin installiert um nicht ständig an die ‚function.php‘ ran zu müssen.

    Wie geschrieben, hab ich kurzerhand den Funktionsnamen im Child geändert. Das funktioniert.

    Betreffend responsive:

    So schaut es auf dem iPhone aus.

    Thread-Starter radarin

    (@radarin)

    in Luft aufgelöst, also nochmals.

    Das ist nicht das übliche Verhalten des Themes, lässt sich aber nur anhand des Screenshots nicht beurteilen.

    Thread-Starter radarin

    (@radarin)

    Es liegt offensichtlich am Child, das Parent funktioniert einwandrei. Liegt möglicherweise daran, dass die functions.php des Child leer ist. Der wesentliche Teil des <head> wird über eine Funktion generiert. Da wird weiterhin

    <link rel='stylesheet' id='responsive-style-css' href='http://www.restaurant-waespi.ch/wp-content/themes/responsive/core/css/style.css?ver=3.8' type='text/css' media='all' />

    geladen. Anschliessend lade ich die Selbe, modifizierte Datei nochmals aus dem Child. Entferne ich die Datei aus dem Parent besteht der Fehler weiterhin, entferne ich sie aus dem Child ist der Fehler weg. Also muss der Fehler in der style.css des Child entstehen. Dass dies an meinen Anpassungen liegen soll, kann ich nicht nachvollziehen. Es gibt auch noch eine responsive.css welche ausschliesslich im Parent existiert.

    Wenn ich den Original-Inhalt aus dem Parent ins Child übernehme, besteht der Fehler weiterhin. Das Selbe CSS aus dem Parent scheint sich anders zu verhalten wie wenn ich es aus dem Cild lade. Das Ganze wird immer mysteriöser. Hat es ev. damit zu tun, dass ich in der function.php kein CSS abmelde?

    • Diese Antwort wurde geändert vor 6 Jahren, 4 Monaten von radarin.
    • Diese Antwort wurde geändert vor 6 Jahren, 4 Monaten von radarin.
    • Diese Antwort wurde geändert vor 6 Jahren, 4 Monaten von radarin.
    • Diese Antwort wurde geändert vor 6 Jahren, 4 Monaten von radarin.

    Du hast einen Fehler im Child Theme, kannst aber nicht nachvollziehen, dass der Fehler von deinen Anpassungen kommt? Wer hat denn das Child Theme geschrieben?

    Die functions.php deines Child Theme ist leer? Wie erstellst du denn dann überhaupt ein Child Theme?

    Vielleicht magst du nochmal nachlesen, wie es richtig geht?

    Mit der ursprünglichen Frage hat das allerdings nichts mehr zu tun, oder?

    Thread-Starter radarin

    (@radarin)

    soll ich einen neuen Thread machen?

    Ich hab das Child auf dem üblichen Weg erstellt. Einzig das wp_deregister_style( '???'); erfolgt nicht, weil ich in der `function.php‘ des Parent nichts passendes gefunden habe.

    soll ich einen neuen Thread machen?
    Wenn du eine konkrete Frage hast, ja.

    Ich hab das Child auf dem üblichen Weg erstellt.
    Dann ist die functions.php (übrigens Plural) auch nicht leer.

    Einzig das wp_deregister_style( '???'); erfolgt nicht, weil ich in der function.php des Parent nichts passendes gefunden habe.

    Das Stylesheet des Parent Theme wird in Zeile 300 ff. der functions.php eingebunden.

    Thread-Starter radarin

    (@radarin)

    Ich beende das Ganze hier mal, da das eigentliche Thema ja gelöst ist.

    Zur Vollständigkeit zum aktuellen Stand:
    Als ich das Child erstellt habe, ist mir nicht aufgefallen, dass es da noch eine weitere functions.php gibt. Sehr übersichtlich sowas. Wie auch immer. Da ich aber mein angepasstes CSS in der header.php NACH dem Originalen geladen habe, kann man sich von mir aus streiten ob das über die functions.php gelöst werden soll.
    In der Anleitung steht, erstellen sie eine leere functions.php. Den nächsten Schritt hab ich einfach weggelassen, somit blieb die Datei leer.

    Da der Fehler aber in der neuen CSS Datei zu suchen ist, ist es nebensächlich, wie die Dateien in der richtigen Reihenfolge geladen werden. Da ich absolut keine Vorstellung habe, welche Änderung sich so auf die mobile Darstellung auswirkt wird es wohl darauf hinauslaufen, nochmals das Original rein kopieren und die Änderungen nochmals vornehmen, und dabei auf Desktop und Mobile die Auswirkungen laufend prüfen.

    Jedenfalls vielen Dank für Eure Hilfe und Tips!

    Gruss René

Ansicht von 10 Antworten - 1 bis 10 (von insgesamt 10)
  • Das Thema „Funktion aus ‚function.php‘ in Snipper überschreiben“ ist für neue Antworten geschlossen.