Metadaten in Dateien angeben und auslesen

Wird ein Theme erstellt, so benötigt es eine style.css-Datei, in der am Anfang einige wichtige Metainformationen stehen müssen. Auch Plugins haben einen solchen Header, der definiert, wie das Plugin in der Liste repräsentiert wird.
In diesem Artikel zeigen wir euch, welche Funktion dafür zuständig ist und brainstormen über Möglichkeiten.

Schaut man sich eine typische Plugin-Datei an, so hat sie stets einen Header, der diverse Metadaten enthält.

<?php
/**
 Plugin Name:       My Basics Plugin
 Plugin URI:        https://example.com/plugins/the-basics/
 Description:       Handle the basics with this plugin.
 Version:           1.10.3
 Requires at least: 5.2
 Requires PHP:      7.2
 Author:            John Smith
 Author URI:        https://author.example.com/
 License:           GPL v2 or later
 License URI:       https://www.gnu.org/licenses/gpl-2.0.html
 Text Domain:       my-basics-plugin
 Domain Path:       /languages
 */ 
?>

Mit diesen Daten kann WordPress die Plugin-Datei korrekt in der Plugin-Übersicht anzeigen und erhält weitere Informationen für Übersetzungen, Mindestanforderungen oder Lizenzbestimmungen.
Doch wie liest WordPress diese Daten aus?

Wie üblich besitzt WordPress auch hierfür eine eigene Funktion: get_file_data() (get_file_data() im WordPress-Codex). Die Funktion liest die ersten 8 Kilobyte einer Datei aus und ermöglicht, entsprechende Metadaten in einem Array bereitzustellen.

<?php
get_file_data( string $file, array $default_headers, string $context = '' );
?>

$file enthält den absoluten Pfad zur Datei und ist erforderlich.
$default_headers enthält die Zuordnung von Metadaten-Beschriftungen zu den entsprechenden Array-Keys. Auch dieser Parameter ist zwingend erforderlich.
$context ist optional und bindet einen Filter-Hook ein.

Konkretes Beispiel

Angenommen, wir haben in einer Datei Metadaten wie oben aufgeführt. Dieser ist zwar eine Demo, jedoch voll funktionsfähig als Plugin-Metadaten. Folgender Code kann die Daten auslesen:

<?php
$metadata = get_file_data('plugin.php', array(
    'plugin_name' => 'Plugin Name',
    'plugin_uri' => 'Plugin URI',
    'description' => 'Description',
    'version' => 'Version',
    'requires' => 'Requires at least',
    'requires_php' => 'Requires PHP',
    'author' => 'Author',
    'author_uri' => 'Author URI',
    'license' => 'License',
    'license_uri' => 'License URI',
    'textdomain' => 'Text Domain',
    'domain_path' => 'Domain Path'
);
?>

Es geschieht also eine Zuordnung von internem, programmatischem Namen (Array-Schlüssel) zum ausgeschriebenen Wert in den Meta-Angaben (Array-Wert). Mit Hilfe von $metadata['plugin_name'] erhält man bspw. den Wert Plugin Name.

Der Kreativität freien Lauf lassen

Diese Funktion ist nicht zwingend auf Plugins und Themes festgesetzt, sondern kann frei genutzt werden.

So könnte man die Metadaten einer Datei als für den Nutzer recht komfortable Möglichkeit nutzen, Parameter/Informationen an ein Skript zu übergeben.
Auch lässt sich so recht schnell und einfach eine Art Textbibliothek bauen: Legt man mehrere Dateien mit entsprechenden Metadaten in einen Ordner, so kann man dessen Inhalt bzw. die Metadaten in einer Schleife auslesen und so Beschriftungen für Tabs, Buttons, … ableiten.
Zuletzt kann man so eigene Skripte/Plugins mit eigenen Optionen versehen, die so menschenlesbar sind, dass auch ein Laie hier Daten eintragen kann.

Alle Lösungen sind natürlich nah an der Datei und Variablen/Inhalte sollten eher über grafische Oberflächen eingestellt und vor dem Speichern validiert werden. In bestimmten Situationen ist dies jedoch nicht gewünscht oder möglich.

Und da kann get_file_data() vielleicht eine Lösung sein, sofern die gesamten Informationen weniger als 8 KB in Anspruch nehmen.

Schreibe einen Kommentar