Automatische Updates für WordPress-Themes und -Plugins aus privaten GitLab-Repos

Ich habe mich in den letzten paar Tagen mit folgendem Szenario beschäftigt: ein WordPress-Theme oder -Plugin holt sich seine Updates aus einem privaten GitLab-Repo und prüft anhand der Git-Tags auf eine neue Version. Rausgekommen ist dabei eine Lösung als WordPress-Plugin, die sich aber auch direkt in ein Theme oder Plugin integrieren lässt.

Finden könnt ihr das Plugin auf GitHub. Es ist so ziemlich mein erster PHP-Code mit Klassen (eventuell sogar objektorientiert(?)) und ich würde mich sehr über Anmerkungen und Verbesserungsvorschläge freuen – entweder hier als Kommentar oder im GitHub-Repo 🙂 Für den Einsatz von Namespaces und Tags in Code-Kommentaren habe ich mich ein wenig in einem Repo von Alain Schlesser inspirieren lassen.

Nutzung als WordPress-Plugin

Der Themes-Tab der Einstellungsseite vom GitLab-Updater. (Screenshot: eigene Installation)

Jetzt aber zu dem Tool. Ihr könnt es – wie bereits erwähnt – entweder als Plugin oder direkt in dem Theme beziehungsweise Plugin nutzen, das Updates erhalten soll. Wenn ihr das Plugin einsetzt, erhaltet ihr eine neue Einstellungsseite unter EinstellungenGitLab Updater, auf der je eine Liste mit allen installierten Plugins und Themes zu finden ist, jeweils immer mit den folgenden drei Feldern pro Theme/Plugin (oben im Screenshot ist der Anfang des Theme-Tabs auf dieser Installation hier zu sehen):

  • Access token ist der GitLab-Access-Token, der den api- und read_registry-Scope benötigt. Am sichersten wäre es hier vermutlich, diesen Access-Token für einen Nutzer mit Reporter-Rechten anzulegen, der nur Zugriff auf dieses Repo hat.
  • GitLab URL ist die URL der GitLab-Installation – zum Beispiel https://gitlab.com/.
  • Repo ist der Bezeichner des Repos, wie es auch in der URL angezeigt wird, wenn ihr es in GitLab anschaut: username/project oder group/project.

In ein Theme oder Plugin integriert

Wenn ihr in einer WordPress-Installation nur ein Theme oder Plugin habt, das dieses Skript verwendet, könnt ihr es auch direkt integrieren (auch bei mehreren in einer Installation möglich – da solltet ihr dann nur den Namespace anpassen, damit es nicht zu Kollisionen mit mehreren Klassen gleichen Namens kommt).

In einem Theme

Wenn ihr es direkt in einem Theme nutzen möchtet, könnt ihr euch die src/ThemeUpdater.php und die src/UpdaterBase.php nehmen und in das Theme packen – zum Beispiel in einen wp-gitlab-updater-Ordner. Anschließend führt ihr es wie folgt aus (in der functions.php oder einer anderen Datei, die in die functions.php geladen wird):

/** * Include the file with the ThemeUpdater class. */ require_once 'wp-gitlab-updater/theme-updater.php'; /** * Init the theme updater. */ new Moenus\GitLabUpdater\ThemeUpdater( [ 'slug' => 'SlugOfTheTheme', 'access_token' => 'YourGitLabAccessToken', 'gitlab_url' => 'URLtoGitLabInstall', 'repo' => 'RepoIdentifier', ] );
Code-Sprache: PHP (php)

Die Parameter sind dieselben wie oben beschrieben. Neu ist hier lediglich, dass ihr den slug des Themes angeben müsst.

In einem Plugin

Für ein Plugin braucht ihr die src/PluginUpdater.php und src/UpdaterBase.php. So kann der Aufruf aussehen:

/** * Include the file with the PluginUpdater class. */ require_once 'wp-gitlab-updater/plugin-updater.php'; /** * Init the plugin updater with the plugin base name. */ new Moenus\GitLabUpdater\PluginUpdater( [ 'slug' => 'SlugOfPlugin', 'plugin_base_name' => 'BaseNameOfThePlugin', 'access_token' => 'YourGitLabAccessToken', 'gitlab_url' => 'URLtoGitLabInstall', 'repo' => 'RepoIdentifier', ] );
Code-Sprache: PHP (php)

Hier kommt noch plugin_base_name dazu, bestehend aus dem Verzeichnis-Namen und Dateinamen der Hauptdatei – beispielsweise svg-social-menu/svg-social-menu.php.

4 Reaktionen zu »Automatische Updates für WordPress-Themes und -Plugins aus privaten GitLab-Repos«

    1. Hey,

      danke für den Hinweis! Für den konkreten Fall war wirklich die Update-Möglichkeit aus privaten GitLab-Repos gefragt, aber Bedrock sieht auf den ersten Blick zumindest interessant aus – werde ich mir mal näher anschauen.

      Viele Grüße
      Florian

  1. Hi,

    auch wenn seit der Veröffentlichungt dieses Artikels ein wenig Zeit verstrichen ist, so bin ich erst jetzt, aus gegebenen Anlass darauf aufmerksam geworden.

    Ich bekomme es leider weder mit dem aus deinem Repo greladenen Plugin, noch mit dem ins Theme zu implementierenen Files und Codes zum Laufen.

    Leider kann man auch nur schwer prüfen wo der Fehler liegt. Vllt. könnte man hier eine Verbindungsprüfung einbauen? 😛

    Spaß beiseite ... Egal wie ich mein Theme im Gitlab Repo anpasse und aktualisiere, ich erhalte keine Anzeige im wordporess, das sich etwas in meinem Theme verändert hat, und auch das Theme aktualisiert sich nicht automatisch. Habe ich nur einen Denkfehler?

    Würde mich freuen, wenn du mir hier Hilfestellung geben kannst.

    Viele Grüße und danke für Deine Arbeit!
    Ben

Schreibe einen Kommentar

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