Gibt es eine globale Datei functions.php, die für jedes Thema geeignet ist?

11

Gibt es eine globale Art von functions.php-Datei, die für jedes Thema funktioniert?

Das Problem ist hier:

Wenn ich eine functions.php-Datei in einem Thema ändere, muss ich mich um zwei Änderungen kümmern: Erstens muss ich mich um die Aktualisierungen dieses Themas kümmern. Zweitens muss ich mich darum kümmern, das Thema der Site zu ändern.

Ist es also möglich, Änderungen an der Datei functions.php vorzunehmen, die unabhängig von einem Thema ist, anstatt Änderungen an der Datei functions.php eines Themas vorzunehmen?

Mert Nuhoglu
quelle
4
Ist das Kopfgeld wirklich notwendig? Die Frage hat bereits gute Antworten
onetrickpony
Da @Mohit Bumb derjenige war, der a) das Kopfgeld gab und b) der erste war, der die Verwendung eines Plugins vorschlug, würde ich sagen, dass er derjenige sein sollte, der die Wiederholungspunkte (zurück) erhält. IMO war ein Kopfgeld nicht notwendig (und ich denke, er wusste nicht, dass er es tatsächlich verschenken musste ).
Kaiser

Antworten:

15

Der Unterschied zwischen themenbezogenem und nicht themenbezogenem Code ist eher organisatorischer als technischer Natur. Jeder aktive Code trägt zur resultierenden Umgebung bei, unabhängig davon, woher er geladen wird.

Es gibt eine Reihe von Stellen, an denen Code geladen wird, die nicht Teil des WordPress-Kerns sind:

  • wp-config.php Konfigurationsdatei
  • aktives Thema (und sein übergeordnetes Thema für untergeordnete Themen)
  • aktive Plugins
  • muss Plugins verwenden
  • Drop-Ins (diese sind etwas fortgeschritten und dienen ganz bestimmten Zwecken)

Ein typischer Ort für Ihren eigenen Code, der nicht Teil des Themas sein sollte, ist das Erstellen eines Plugins. Andere Ansätze profitieren nicht von generischen Groß- und Kleinschreibung, sondern von verfallener Benutzeroberfläche (Verwaltung über den Administratorbereich) und technischen (Aktivierungs- / Deaktivierungs- / Deinstallationsereignisse) Annehmlichkeiten eines normalen Plugins.

Selten
quelle
+1 an Sie und @kaiser. Ich glaube, die richtige Antwort lautet: 1) Erstellen Sie ein untergeordnetes Thema, in dem die benutzerdefinierten Funktionen gespeichert werden functions.php, oder 2) Erstellen Sie ein benutzerdefiniertes Plugin, in dem diese Funktionen gespeichert werden, sodass es zwischen verschiedenen Themen portierbar ist.
Chip Bennett
@Chip Da die Frage nach dem Beibehalten des Codes beim Wechseln von Themen fragt, sehe ich das untergeordnete Thema nicht als passend an. Was ist, wenn Sie zu einem untergeordneten Thema wechseln möchten? Das Plugin ist für bestimmte Anforderungen am besten geeignet.
Erster
Deshalb habe ich euch beide hochgestimmt. :) Sie können jedoch weiterhin ein untergeordnetes Thema verwenden, wenn Sie das Thema wechseln. Ändern Sie einfach das Template:Tag entsprechend im untergeordneten Thema style.css.
Chip Bennett
@Chip du hast meinen Standpunkt nicht verstanden. Was ist, wenn ich ein untergeordnetes Thema verwenden möchte? Ich erstelle mit meinem Code ein untergeordnetes Thema für Twenty Eleven. Dann möchte ich zu einem Thema wechseln, das auch ein untergeordnetes Thema von Twenty Eleven (oder einem anderen Elternteil) ist. Ich habe keinen anderen Pfad als das manuelle Zusammenführen von zwei untergeordneten Themen. Wenn ich das nächste Mal das Thema wechsle, wird die Zusammenführung aufgehoben. Es ist ein Chaos.
Erster
Ich benutze dafür ein Muss. Ich finde es eine schnelle und einfache Möglichkeit, Funktionen, Hooks und Shortcodes hinzuzufügen, die für die
themenübergreifende
6

Nun, das ist ein echtes Problem, und viele Menschen sehen sich damit konfrontiert, wenn sie das Thema wechseln, aber es gibt einfache Lösungen.

Fügen Sie diese Funktion zu einer neuen Seite hinzu, nicht zu functions.php, und geben Sie ihr einen eindeutigen Namen, z. B. yousitename + timestamp oder was auch immer Sie möchten, aber einen eindeutigen Ordner mit demselben Namen erstellen, komprimieren und als Plugin hochladen, damit es sicher funktioniert, bis Sie es deaktivieren .

Um zu verstehen, welches Plugin für was ist, verpassen Sie nicht, diesem Plugin einen Namen zu geben, wie:

/*
Plugin Name: XYZ
*/
Mohit Bumb
quelle
3

Als Ergänzung zu @MBTheDeveloper Antwort.

Andere Optionen wären:

  1. Erstellen Sie ein untergeordnetes Thema für Ihr aktuelles Thema und verwenden Sie die Datei functions.php aus diesem (dies ist "Best Practice").
  2. Verwenden Sie includein Ihrer Themes-Funktion die PHP-Datei und laden Sie eine custom-function.php-Datei, die Ihren benutzerdefinierten Code enthält.
Kaiser
quelle
2

Nehmen Sie keine ortsspezifischen Änderungen in der Datei functions.php des Themas vor.

Erstellen Sie stattdessen ein ortsspezifisches Plugin. Ich verwende gerne den Domainnamen der Site wie "ottopress.com". Fügen Sie dann Ihre Snippets in dieses Plugin ein und lassen Sie es nur auf dieser Site aktiv.

Wenn Sie einen Ausschnitt verwandter Änderungen haben, erstellen Sie alternativ ein spezielles Plugin für nur diese. Dies gibt Ihnen die Möglichkeit, verwandte Codebits nach Bedarf ein- und auszuschalten.

Otto
quelle
2

Einige Erklärungen

Zuerst müssen Sie den Zweck von functions.php in einem Thema verstehen. Functions.php ist im Grunde nur eine Plugin-Datei ohne Namen, die, falls vorhanden, automatisch von Wordpress geladen wird. Wordpress lädt die function.php Ihres aktuellen Themas für WordPress-Front-End-Seiten und Back-End-Seiten (Admin).

Es gibt keinen Unterschied zwischen einem Plugin und functions.php, außer dass Plugins einen Namen haben und unabhängig von anderen Plugins und Themes aktiviert / deaktiviert werden können. Die funtions.php ist an Ihr aktuelles Thema angehängt. Wenn Sie zu einem anderen Thema wechseln, verwendet Wordpress die functions.php des neuen Themas und nicht Ihre alte functions.php mit benutzerdefinierten Änderungen.

Theme-Updates überschreiben auch functions.php und es gibt keine Möglichkeit, dies zu vermeiden. Selbst wenn Sie Ihre benutzerdefinierten Änderungen in separaten Codedateien ablegen und in Ihre fucntions.php aufnehmen, müssen Sie diese Include-Zeile nach jedem Update hinzufügen.

Im Allgemeinen die Art des Codes, der in functions.php enthalten sein sollte:

  • Funktionen, die in den Vorlagendateien Ihres Themas verwendet werden.
  • Themenoptionen
  • Seitenleisten
  • Navigationsmenüs
  • Postformate
  • poste Thumbnails
  • Jeder Code, der sich nur auf das aktuelle Thema bezieht.

Da Sie Ihre benutzerdefinierten Änderungen beibehalten möchten, auch wenn Sie die Themen wechseln. Da das untergeordnete Thema in diesem Fall nicht funktioniert, werden Sie das Thema wechseln und die functions.php des untergeordneten Themas wird nicht verwendet.

Die Lösung

Die einzige von @Otto empfohlene Lösung besteht darin, eine Plugin-Datei zu erstellen. Der Ansatz, den Sie zum Erstellen Ihres ortsspezifischen Plugins verwenden können, besteht darin, einen Ordner mit Ihrem Site-Namen in 'wp-content / plugins' zu erstellen und darin Plugin-Dateien zu erstellen.

Warum Plugin-Dateien? und keine einzelne Plugin-Datei.

Gruppieren Sie die Funktionen der gruppenbezogenen Site in Bezug auf Code in separaten Plugin-Dateien. Vergessen Sie nicht, den Plugin-Header in alle Plugin-Dateien einzufügen, damit diese von Wordpress als separate Plugins erkannt werden. Sie haben dann die Möglichkeit, verschiedene Features / Funktionen Ihrer Site zu aktivieren / deaktivieren, ohne alles zu beschädigen.

Hameedullah Khan
quelle