Um ein freiberuflicher WordPress-Entwickler zu sein, müssen Sie häufig mehrere WordPress-Sites für verschiedene Kunden gleichzeitig entwickeln. Hier ist wie.
Dazu müssen Sie Folgendes übernehmen:
Mit diesem Setup können Sie einfach:
In diesem Tutorial beziehen wir uns auf Mac OS X, Sie können es jedoch problemlos an jedes andere Betriebssystem anpassen. Außerdem gehen wir davon aus, dass auf dem Remote-Server Git bereits installiert ist und der SSH-Zugriff mit der Authentifizierung mit öffentlichen Schlüsseln konfiguriert ist (die SSH- und Git-Installationen fallen nicht in den Umfang dieses Lernprogramms.).
Das Szenario, das wir sehen werden, besteht aus einem Unmittelbare Umwelt das erlaubt die Entwicklung einer WordPress-Site mit Plugins und Themes und einem Remote-Server das wird die "Produktion" WordPress-Site hosten. In der lokalen Umgebung verwenden wir eine Desktop Computer und ein Notizbuch Computer. Auf beiden Computern werden MAMP, Dropbox und Git so eingerichtet, dass Sie auf Ihrem Desktop arbeiten können, wenn Sie im Büro sind, und auf Ihrem Notebook, wenn Sie nicht im Büro sind, und alle Änderungen synchronisiert werden.
Wir werden Dropbox verwenden, um Dateien und Datenbanken zwischen Desktop und Notebook zu synchronisieren, und Git, um Änderungen lokal zu verfolgen und auf dem Remote-Server bereitzustellen.
Der Einfachheit halber definieren wir www.site.dev
als Entwicklungsstandort für die lokale Umgebung und www.site.com
als Produktionsstandort auf dem Remote-Server.
In der lokalen Umgebung:
Auf dem Remote-Server:
In der lokalen Umgebung:
Typische Workflow-Beispiele:
Laden Sie Dropbox herunter und installieren Sie es auf Ihrem Desktop und Ihrem Notebook (Anweisungen finden Sie hier). Verwenden Sie auf beiden Computern dasselbe Konto.
Erstellen Sie im Ordner Dropbox auf dem Desktop die folgende Verzeichnisstruktur:
Stellen Sie sicher, dass die gleiche Verzeichnisstruktur in Notebook übertragen wird.
MAMP ist eine Abkürzung für Mac, Apache, MySQL und PHP, eine Anwendung, die eine lokale Serverumgebung auf Ihrem Mac installiert.
Die Installation ist sehr einfach: Laden Sie MAMP hier herunter, entpacken Sie das Archiv, doppelklicken Sie darauf und folgen Sie den Anweisungen. Tun Sie dies auf Desktop und Notebook. Starten Sie MAMP noch nicht: Bevor Sie dies tun, müssen Sie die Datenbank verschieben und die Standardkonfiguration ändern.
Auf Desktop Verschieben Sie den Datenbankordner vom MAMP-Standardverzeichnis in das db-Verzeichnis in Dropbox. Öffnen Sie dazu ein Terminal und verwenden Sie die folgenden Befehle:
cd / Anwendungen / MAMP / db mv * ~ / Dropbox / Entwicklung / db /
Auf Notizbuch Öffnen Sie ein Terminal und löschen Sie den Datenbankordner mit folgendem Befehl:
cd / Anwendungen / MAMP rm -rf ./db
Zum Schluss auf beide Desktop und Notizbuch Erstellen Sie mit dem folgenden Befehl einen symbolischen Link von MAMP zu Dropbox:
ln -s ~ / Dropbox / Entwicklung / db / Anwendungen / MAMP / db
Nun der symbolische Link / Anwendungen / MAMP / db zeigt auf den freigegebenen Ordner Dropbox ~ / Dropbox / Entwicklung / db das enthält die MAMP-Datenbanken. Starten Sie MAMP noch nicht: Wir müssen zuerst die Konfiguration ändern.
MAMP verwendet benutzerdefinierte Ports für Apache- und MySQL-Serverinstanzen: Apache wird auf Port 8888, MySQL auf Port 8889 ausgeführt. Sie können diese Konfiguration beibehalten oder, wie von uns vorgeschlagen, ändern, um Standardports zu verwenden: 80 für Apache und 3306 für MySQL.
Starten Sie MAMP, um die Standardports wiederherzustellen nur auf Ihrem Desktop , Klicken Sie auf "Einstellungen", dann auf "Ports", klicken Sie auf "Auf Standardeinstellungen für Apache und MySQL setzen" und klicken Sie anschließend auf "OK": MAMP speichert die neue Konfiguration und startet automatisch neu.
Öffnen Sie nun auf Ihrem Desktop Ihren bevorzugten Browser und gehen Sie zu http: // localhost / MAMP /: Sie sollten die MAMP-Startseite sehen.
Wenn Sie die MAMP-Startseite nicht sehen, ist wahrscheinlich Web Sharing aktiviert: Öffnen Sie die Systemeinstellungen, klicken Sie auf Freigabe und deaktivieren Sie Web Sharing.
Machen Sie sich keine Sorgen, wenn Mac OS X beim Starten von MAMP ein Kennwort erfordert: Wir haben Apache so konfiguriert, dass es an Port 80 ausgeführt wird, bei dem es sich um einen privilegierten Port handelt, und dies erfordert ein Administratorkennwort.
Weil in dieser Konfiguration MAMP kann nicht gleichzeitig auf Ihrem Desktop und auf Ihrem Notebook ausgeführt werden, Beenden Sie MAMP auf dem Desktop, starten Sie es in Notebook und konfigurieren Sie es auf dieselbe Weise. Wenn Sie fertig sind, stoppen Sie MAMP.
Die MAMP-Apache-Konfiguration wird in gespeichert /Applications/MAMP/conf/apache/httpd.conf. Bearbeiten Sie diese Datei mit Ihrem bevorzugten Texteditor und fügen Sie die folgenden Zeilen hinzu (tun Sie dies für beide Desktop und dein Notizbuch):
# Enthält die für den Dropbox-Ordner freigegebene Konfiguration. Include /Users/YOURUSERNAME/Dropbox/Development/conf/local-development.conf
Ersetzen DEIN BENUTZERNAME
mit Ihrem Mac OS X-Benutzernamen (wenn Sie ihn nicht kennen, öffnen Sie das Terminal und führen Sie es aus.) Wer bin ich
; es wird Ihnen Ihren Benutzernamen geben).
Diese Anweisung weist Apache an, eine zusätzliche Konfigurationsdatei aus Ihrem Dropbox-Ordner zu laden (zwischen Desktop und Notebook synchronisiert). Auf diese Weise können wir es als verwenden die lokale Umgebungskonfigurationsdatei.
Apache Virtual Host ist eine nette Funktion, mit der Sie mehr als eine Website (z. B. www.site1.com und www.site2.com) auf einem einzigen Server ausführen können. Virtuelle Hosts können "IP-basiert" sein, was bedeutet, dass Sie für jede Website eine andere IP-Adresse haben, oder "namenbasiert", dh Sie haben mehrere Namen, die auf einer IP-Adresse laufen. Die letzte ist die Funktion, die wir verwenden werden (siehe hier für Details)..
Öffnen Sie mit Ihrem bevorzugten Texteditor die Konfigurationsdatei für die lokale Umgebung /Users/YOURUSERNAME/Dropbox/Development/conf/local-development.conf und füge folgende Zeilen ein:
AllowOverride All # # Named Virtual Host # LogFormat "% V% h% l% u% t \"% r \ "% s% b" YOURUSERNAME / Dropbox / Development / logs / errors.log UseCanonicalName Off VirtualDocumentRoot / Benutzer / YOURUSERNAME / Dropbox / Entwicklung / vhosts /% 0
Die Saite "% 0
"wendet den Zauber an: wenn der Apache-Server eine Anfrage für die Domäne erhält www.site.dev Es sucht nach einem Verzeichnis namens www.site.dev im / Benutzer / YOURUSERNAME / Dropbox / Entwicklung / vhosts /, und wenn gefunden, dient Dateien davon.
Die anderen Anweisungen weisen Apache an, wo Fehler geschrieben und auf Protokolldateien zugegriffen werden muss.
Jetzt können wir die WordPress-Entwicklungsseite einrichten www.site.dev. Dazu müssen wir ein erstellen www.site.dev Verzeichnis (auf Ihrem Desktop).
und wir müssen bearbeiten (auf Desktop und Notebook) / etc / hosts Datei, um den Hostnamen zuzuordnen www.site.dev an die localhost-IP-Adresse. Öffnen Sie die Datei mit Ihrem bevorzugten Texteditor / etc / hosts und hängen Sie die folgenden Zeilen an das Ende der Datei an (Mac OS X erfordert Ihr Kennwort, um diese Systemdatei zu ändern):
# lokale entwicklung 127.0.0.1 www.site.dev
An dieser Stelle kann es sinnvoll sein, einige Überprüfungen durchzuführen: Öffnen Sie das Terminal und führen Sie den folgenden Befehl aus:
ping -c 3 www.site.dev
Sie sollten eine ähnliche Antwort darauf haben:
Nun ist es an der Zeit, WordPress einzurichten: Laden Sie das WordPress-Paket hier herunter und entpacken Sie es in einem temporären Ordner. Verschieben Sie den gesamten Inhalt des temporären Ordners nach innen /Users/YOURUSERNAME/Dropbox/Entwicklung/vhosts/www.site.dev/.
Starten Sie auf Ihrem Desktop MAMP und öffnen Sie Ihren Browser unter http: // localhost / MAMP /. Klicken Sie auf die Registerkarte phpMyAdmin und erstellen Sie eine neue Datenbank mit dem Namen site_dev
:
Öffnen Sie Ihren Browser unter www.site.dev und schließen Sie die WordPress-Installation mit folgenden Werten ab:
Stoppen Sie MAMP auf dem Desktop, warten Sie auf die Dropbox-Synchronisation und starten Sie es in Notebook. Öffnen Sie Ihren Notebook-Browser unter www.site.dev: WordPress ist bereits konfiguriert!
Am Ende von Schritt 3 haben wir eine lokale WordPress-Entwicklungsumgebung, die auf MAMP basiert und über Dropbox zwischen Desktop und Notebook synchronisiert ist. Nun ist es an der Zeit, den Remote-Server zu konfigurieren.
Git ist ein verteiltes Versionskontrollsystem, das im Laufe der Zeit Änderungen an einer Datei oder einem Dateisatz aufzeichnet und Änderungen an einen Remote-Server überträgt (genauere Beschreibung hier). In diesem Tutorial gehen wir davon aus, dass Git bereits auf Ihrem Server installiert ist. Dementsprechend fahren wir mit der Konfiguration fort.
Zuerst müssen Sie sich beim Server anmelden. Wir gehen davon aus, dass Sie über ein Konto mit SSH-Zugriff und Authentifizierung mit öffentlichen Schlüsseln verfügen. Auf diese Weise müssen Sie nicht bei jeder Anmeldung ein Kennwort eingeben. Öffnen Sie ein Terminalfenster und stellen Sie eine Verbindung zum Server her:
ssh [email protected]
Richten Sie einige Git-Standardeinstellungen für Benutzer und E-Mail ein, damit Git nicht jedes Mal danach fragt:
git config --global user.email "[email protected]" git config --global user.name "Ihr Name"
Setup und ein leeres Repository initialisieren:
mkdir site.git cd site.git git init --bare
Um die Bereitstellung von der Entwicklungs- bis zur Produktionsstätte zu ermöglichen, müssen Sie ein einrichten Git-Haken (Ich verwende Vi als meinen Texteditor für den Remote-Server):
cd-Hooks nach dem Empfang
Fügen Sie dann die folgenden Zeilen ein:
#! / bin / bash # docroot = "/ home / yourusername / www" beim Lesen oldrev newrev ref do branch = "echo $ ref | cut -d / -f3" if ["master" == "$ branch"]; dann git --work-tree = $ docroot checkout -f $ branch fi fertig
Stellen Sie die Variable ein Dokroot
auf den Webserver DocumentRoot und dann machen Post empfangen
ausführbar:
chmod 755 nach empfangen
Dieser Hook wird am Ende des Prozesses zum Übertragen von Änderungen von einem Client (Desktop oder Notebook) an den Remote-Server aufgerufen. Die Bereitstellung erfolgt im DocumentRoot-Verzeichnis des Produktions-Webservers (Einzelheiten zu Git Hooks finden Sie hier)..
Git-Befehle verwenden einige Umgebungsvariablen; Wir müssen zwei davon einrichten: GIT_DIR
und GIT_WORK_TREE
. Die erste gibt den Pfad zum Repository an, die zweite den Pfad zur Arbeitsstruktur (DocumentRoot). Die Standard-Shell auf meinem Remote-Server ist Bash, also füge ich sie der Datei hinzu .bash_profile
.
cd ~ vi .bash_profile
Fügen Sie am Ende der Datei folgende Zeilen hinzu:
# GIT export GIT_DIR = ~ / repo.git export GIT_WORK_TREE = ~ / www
Auf dem Remote-Server müssen Sie noch eine Datenbank unter MySQL erstellen. Dazu können Sie die ausführlichen Installationsanweisungen auf dem WordPress-Codex befolgen. Mein Remote-Server verfügt über cPanel als Hosting-Bedienfeld. Ich folge diesen Anweisungen.
Installieren Sie Git unter Mac OS X (genauere Anweisungen zum Pro Git-Buch): Laden Sie das Installationsprogramm von der Google-Codeseite herunter, doppelklicken Sie auf die dmg-Datei, dann auf die pkg-Datei und befolgen Sie die Anweisungen. Tun Sie dies auf Desktop und Notebook.
Jetzt können Sie ein Git-Repository in der lokalen Umgebung initialisieren. Öffnen Sie dazu das Terminal (auf Ihrem Desktop oder auf Ihrem Notebook) und verwenden Sie die folgenden Befehle:
cd ~ / Dropbox / Entwicklung / vhost / www.site.dev git init .
Sie sollten so etwas sehen:
Um den Status des Git-Repositorys zu überprüfen, verwenden Sie diesen Befehl:
Git-Status
Die Ausgabe sollte folgendermaßen aussehen:
Git sagt Ihnen, dass alle diese Dateien und Verzeichnisse nicht im Repository nachverfolgt werden, und schlägt die Verwendung von git add
Befehl, um sie zu verfolgen.
Bevor Sie dies tun, müssen Sie einige Änderungen an der Git-Konfiguration vornehmen. Wir müssen Git mitteilen, welche Dateien es verfolgen soll und welche nicht. Verwenden Sie dazu die .Gitignore Datei.
Diese Datei gibt die nicht protokollierten Dateien an, die Git ignorieren sollte (weitere Informationen finden Sie hier). Der Befehl ist einfach, machen wir ein Beispiel, um zu verstehen, wie er funktioniert:
# ignore Mac OS X Desktop Service Store .DS_Store # ignoriert mein-test-Verzeichnis und alle Unterverzeichnisse my-test-dir / #ignore alle TXT-Dateien * .txt
So erstellen Sie die Datei ~ / Dropbox / Entwicklung / vhost / www.site.dev / .gitignore und füge folgende Zeilen hinzu:
# ignorieren Mac OS X Desktop Service Store .DS_Store # ignoriert debug.log WP-Inhalt / debug.log
Für den Moment ist dies alles, was Sie tun müssen. Später werden wir andere Dateien und Verzeichnisse hinzufügen.
WordPress in einer lokalen Umgebung verwendet DB von MAMP und dessen Konfigurationsdatei wp-config.php spiegelt diese Konfiguration wider (Standard-Benutzername und Kennwort von MAMP MySQL):
// ** MySQL-Einstellungen - Diese Informationen erhalten Sie von Ihrem Webhost. ** // / ** Der Name der Datenbank für WordPress * / define ('DB_NAME', 'site_dev'); / ** MySQL-Datenbank-Benutzername * / define ('DB_USER', 'root'); / ** MySQL-Datenbankkennwort * / define ('DB_PASSWORD', 'root'); / ** MySQL-Hostname * / define ('DB_HOST', 'localhost');
Dies funktioniert in einer lokalen Umgebung, aber was passiert, wenn wir es auf dem Remote-Server bereitstellen? Offensichtlich schlägt die Verbindung zur DB fehl, weil DB_NAME
, DB_USER
, DB_PASSWORD
und wahrscheinlich DB_HOST
sind falsch.
Die Lösung stammt aus dem Artikel von Mark Jaquith: Modify the wp-config.php Datei, so dass die Konfiguration für die lokale Umgebung aus einer anderen Datei geladen wird und diese Datei nicht von git verfolgt wird. Dazu öffnen Sie sich wp-config.php Datei und ersetzen Sie die obigen Zeilen mit diesen Zeilen:
if (file_exists (dirname (__FILE__). '/local-config.php')) include (dirname (__FILE__). '/local-config.php'); else define ('DB_NAME', 'YOURDBNAME'); define ('DB_USER', 'YOURDBUSER'); define ('DB_PASSWORD', 'YOURDBPASSWORD'); define ('DB_HOST', 'YOURDBHOSTNAME');
Ersetzen YOURDBNAME
, IHRDBUSER
, IHRDBPASSWORT
und YOURDBHOSTNAME
mit den Werten, die Sie in Schritt 5 definiert haben.
Erstellen Sie die ~ / Dropbox / Entwicklung / vhost / www.site.dev / local-config.php Datei und füge die Definitionen der lokalen Umgebung dort ein:
define ('DB_NAME', 'site_dev'); define ('DB_USER', 'root'); define ('DB_PASSWORD', 'root'); define ('DB_HOST', 'localhost');
Jetzt müssen wir hinzufügen local-config.php zu .Gitignore damit Git es nicht verfolgt:
# Ignorieren Mac OS X Desktop Service Store .DS_Store # Ignorieren Sie debug.log wp-content / debug.log # ignorieren Sie local-config.php local-config.php
OK, jetzt können wir den ersten Commit machen.
Um Änderungen an das Git-Repository in der lokalen Umgebung zu übernehmen, geben Sie die folgenden Befehle ein:
cd ~ / Dropbox / Entwicklung / vhost / www.site.dev / git add. git commit -m "Ursprünglicher Import"
Der erste Git-Befehl verfolgt alle Dateien und Verzeichnisse in ~ / Dropbox / Entwicklung / vhost / www.site.dev / außer dass in .Gitignore, der zweite bindet alle im Git-Repository.
Es ist an der Zeit, WordPress auf den Remote-Server zu pushen, aber zuerst müssen wir das Remote-Git-Repository einrichten:
git remote add website ssh: //[email protected]/home/yourusername/site.git
Dieser Befehl teilt Git mit, dass es ein Remote-Repository gibt Webseite
, auf dem Server gehostet www.site.com erreichbar über eine SSH-Verbindung.
Schließlich die erste Bereitstellung auf Remote-Server:
Git Push-Website-Master
Die Befehlsausgabe sollte folgendermaßen aussehen:
Jetzt können Sie Ihren Browser auf zeigen www.site.com und siehe WordPress-Site auf Remote-Server.
Als Design / Plugin-Entwicklungsbeispiel können wir in der lokalen Umgebung ein Twenty Eleven-Child-Design erstellen und auf dem Remote-Server bereitstellen.
Eine ausführliche Anleitung zum Erstellen eines untergeordneten Designs finden Sie in diesem Artikel über Wptuts +. Grundsätzlich müssen wir ein Verzeichnis erstellen, das zwei Dateien enthält: style.css und Functions.php (Letzteres ist optional).
Also auf dem Desktop (oder auf dem Notebook) das Verzeichnis erstellen ~ / Dropbox / Entwicklung / vhost / www.site.dev / wp-content / themes / my-twentyeleven-child, Erstellen Sie dann eine Datei namens style.css Fügen Sie in diesem Ordner die folgenden Zeilen hinzu:
/ * Name des Themas: Mein elf elf Kinder-Theme URI: http: //www.site.com/ Beschreibung: Untergeordnetes Thema für das elf elf Thema. zwanzigeleven Version: 0.1 * / @import url ("… /twentyeleven/style.css");
Sie können auch einige CSS-Änderungen unter hinzufügen @einführen
Linie, zum Beispiel können Sie den Körperhintergrund ändern:
body background: # D51717;
Dann erstellen Sie die Functions.php Datei und fügen Sie die folgenden Zeilen hinzu:
'. "\ n"; add_action ('wp_head', 'favicon_link'); ?>
Diese einfache Funktionsdatei hat eine Funktion: Sie fügt dem head-Element von HTML-Seiten einen Favicon-Link hinzu.
Nun ist unser Kinderthema fertig und wir müssen es im Git-Repository verfolgen:
cd ~ / Dropbox / Entwicklung / vhost / www.site.dev / git add wp-content / theme / my-twentyeleven-child /
Dann müssen wir die Änderungen übernehmen:
git commit -m "Mein zwanzig elf Kinder-Theme hinzugefügt"
Auf diese Weise können Sie die Entwicklung des untergeordneten Designs fortsetzen, indem Sie Dateien hinzufügen, den Code ändern und all diese Änderungen in das Repository übernehmen. Wenn Ihr Design für den Produktionsserver bereit ist, müssen Sie einfach das git Push
Befehl:
Git Push-Website-Master
Auf diese Weise wird das untergeordnete Design auf dem Remote-Server abgelegt und kann verwendet werden.
Wenn Sie ein Plugin entwickeln, führen Sie die gleichen Schritte aus: Verfolgen Sie das Plugin-Verzeichnis und übernehmen Sie die Änderungen für das Repository. Wenn Ihr Plugin fertig ist, drücken Sie es auf Remote Server.
Auf ähnliche Weise können wir die Installation des WordPress-Plugins oder das WordPress-Update verwalten. Nehmen wir an, wir möchten ein neues Plugin testen und wollen sichergehen, dass es unsere Produktionsstätte nicht beschädigt.
Wir installieren es zunächst in der lokalen Umgebung mithilfe des WordPress-Verwaltungsfensters (Einzelheiten finden Sie hier), dann müssen wir es nachverfolgen und zum Git-Repository hinzufügen (tun Sie dies auf Ihrem Desktop oder auf Ihrem Notebook):
cd ~ / Dropbox / Development / vhost / www.site.dev / git add wp-content / plugins / plugin-to-try / git commit -m "Fügen Sie das Plugin zum Testen hinzu"
Wenn das Plugin funktioniert, können Sie es auf Remote Server bereitstellen.
Git Push-Website-Master
und aktivieren Sie es mit dem WordPress-Verwaltungsbereich.
Wenn das Plugin nicht funktioniert, können Sie es mit dem WordPress-Verwaltungsbereich deinstallieren. Anschließend können Sie es aus den überwachten Dateien entfernen und die Änderungen übernehmen:
git rm wp-content / plugins / plugin-to-try / git commit -m "Das Plugin wurde entfernt"
Ein kleiner Tipp: Wenn Sie ein Plugin-Verzeichnis hinzufügen
.Gitignore
Datei (vor dem Festschreiben) bleibt das Plugin nur in der lokalen Umgebung, wird jedoch nicht auf den Remote-Server übertragen. Dies kann für Plugins wie Debug Bar nützlich sein, die in der lokalen Entwicklung verwendet werden, aber nicht an einen Produktionsstandort übertragen werden müssen.
Ok, wir wissen, dass schnelle Änderungen auf Produktionsservern keine gute Angewohnheit sind, in der Tat eine schlechte Angewohnheit, aber manchmal unvermeidlich. Angenommen, wir haben das geändert DB_PASSWORD
auf dem Remote-Server wp-config.php Datei und jetzt möchten wir diese Änderung in unserer lokalen Umgebung bestätigen wp-config.php. Stellen Sie dazu zunächst eine Verbindung zum Remote-Server über SSH her und verwenden Sie den folgenden Befehl:
git commit -m "DB_PASSWORD in der wp-config.php ändern"
Dann ziehen Sie die Änderungen mit dem folgenden Befehl auf dem Desktop aus dem Remote-Repository ab:
Git Pull Website-Master
Wenn Sie das lesen wp-config.php Du wirst das Neue sehen DB_PASSWORD
.
In diesem Lernprogramm haben wir ein Szenario gesehen, das aus einer lokalen Umgebung und einem Remote-Server besteht, in dem die Entwicklung und die Produktionsstätte gehostet werden www.site.com, Sie können dieses Setup jedoch problemlos für wiederholen www.mynewcustomer.com, zum www.myothernewnewcustomer.com und so weiter.
MAMP, Dropbox und Git bilden ein erfolgreiches Team für die Entwicklung und Bereitstellung von WordPress. Sie stellen eine flexible Entwicklungsumgebung dar, mit der Sie problemlos eine neue Site hinzufügen, sie überall entwickeln können und sie zuverlässig auf dem Produktionsserver bereitstellen können.
Wenn Sie regelmäßig mit WordPress arbeiten, überprüfen Sie die Auswahl der hervorragenden WordPress-Dienstprogramme auf Envato Market. Von Sicherheits-Plugins bis zu iFrame-Anpassern gibt es sicherlich etwas, das Ihnen helfen kann.
WordPress-Dienstprogramme auf dem Envato-Markt