AdWz WP-Plugin 16 – Konfiguration

(AdWz; Auf dem Weg zum) WP-Plugin 16 – Konfiguration

Wieso jetzt auf einmal Konfiguration?

Die Erweiterung zur Verarbeitung gesendeter Daten mit der Methode Post an eine Permalink-URL wird jede Antwort auswerten müssen. Durch diese Auswertung wird jede Anfrage zusätzlich Last erzeugen. Die Erweiterung sollte mindestens de-aktivierbar sein, da nicht jeder Formulare in dieser Variante einsetzt.

Zusätzlich werden Daten für reguläre Ausdrücke, Erkennungskriterien für Permalinks und die PostProxy-URL in der Konfiguration abgelegt, damit nicht bei jeder kleinen Änderung das Plugin angepasst werden muss.

WordPress & Konfiguration

Konfigurationen werden in der Datenbanktabelle wp_options verwaltet. Eine nicht verlinkte WordPress-Seite http://[meinblog]/wp-admin/options.php zeigt alle vorhandenen Optionen auf einer Seite an. Seit WordPress 2.7 wurde eine Settings API hinzugefügt, um Einstellungen leicht über die Administration verwalten zu können.

Das Plugin wird dann nur noch ab Version 2.7 funktionieren, aber was solls – WordPress sollte so und so auf dem aktuellsten Stand gehostet werden.

Settings API

Im ersten Schritt muss die Konfiguration über die Aktion „admin_init“ initialisiert werden.

add_action('admin_init','mg404_settings_api_init');

In der angemeldeten Funktion zur Initialisierung werden Administrationsbereich, Felder und Callback-Funktionen definiert.

function mg404_settings_api_init() {
	add_settings_section('mg404_setting_section', 'mg404rewrite', 'mg404_setting_section_callback', 'misc');
	add_settings_field('mg404_postproxy_enable', 'Activate PostProxy', 'mg404_postproxy_enable_callback', 'misc', 'mg404_setting_section');
	register_setting('misc', 'mg404_postproxy_enable');
}

Hatte versucht die Felder passend dem Administrationsbereich „Permalink“ zuzuordnen. Leider – warum auch immer – funktioniert die Settings API nicht auf dieser Konfigurationsseite? Die Bereiche media, reading, writing und misc konnte ich erfolgreich testen. WP-Bug? mg404rewrite Einstellungen werden jetzt erst einmal misc „Verschiedene Einstellungen“ zugeordnet.

add_settings_section

Die Funktion add_settings_section ordnet die Optionen einem Bereich in der Administration zu.

add_settings_section($id, $title, $callback, $page)
  • $id – Bezeichner zur späteren Referenzierung (im o.a. Bsp.: mg404_setting_section).
  • $title – Titel wird als Überschrift im (Unter-)Bereich ausgegeben (im o.a. Bsp.: mg404rewrite).
  • $callback – Callback-Funktion, um u.a. eine Beschreibung auszugeben (im o.a. Bsp.: mg404_setting_section_callback).
  • $page – Namen der Konfigurationsseite (general, reading, writing, media etc.). Bereich wird am Ende dieser Seite hinzugefügt (im o.a. Bsp.: misc).

add_settings_field

Die Funktion add_settings_field fügt ein Feld auf der Konfigurationsseite hinzu.

add_settings_field($id, $title, $callback, $page, $section = 'default', ...)
  • $id – Eindeutiger Bezeichner für das anzulegende Konfigurationsfeld (im o.a. Bsp.: mg404_postproxy_enable).
  • $title – Titel wird als Kurzbeschreibung links vom Feld ausgegeben (im o.a. Bsp.: Activate PostProxy).
  • $callback – Callback-Funktion, um die Form zur Verwaltung auszugeben (im o.a. Bsp.: mg404_postproxy_enable_callback).
  • $page – Namen der Konfigurationsseite (general, reading, writing, media etc.). Muss mit dem angegebenen Wert $page in add_settings_section übereinstimmen (im o.a. Bsp.: misc).
  • $section – Muss mit dem angegebenen Wert $section in add_settings_section übereinstimmen (im o.a. Bsp.: mg404_setting_section).

register_setting

Die Funktion register_setting meldet ein Feld zur Verwaltung durch WordPress an.

register_setting($option_group, $option_name, ...)
  • $option_group – ? (im o.a. Bsp.: misc).
  • $option_name – Muss mit der $id aus add_settings_field übereinstimmen (im o.a. Bsp.: mg404_postproxy_enable).

Callback-Funktionen

Die Funktion mg404_setting_section_callback gibt lediglich eine Beschreibung für den zuvor definierten Konfigurationsbereich aus.

function mg404_setting_section_callback() {
	echo "<p>Intro text for our settings section</p>";
}

mg404_postproxy_enable_callback muss zur Verwaltung die Felder mit der dazugehörigen ID für die Form ausgeben und zusätlich muss der Wert über get_option($id) richtig gesetzt werden.

function mg404_postproxy_enable_callback() {
	$checked = get_option('mg404_postproxy_enable');
	if ($checked) 
		$checked = " checked='checked' ";
	echo "<input {$checked} name='mg404_postproxy_enable' id='mg404_postproxy_enable' type='checkbox' value='1' class='regular-text code'>";
}

Fertig?

Mit einigen zusätzlichen Feldern sollte das Formular wie folgt aussehen.

mg404rewrite_settings_misc

weiter …

Der Einstiegspunkt wurde in AdWz WP-Plugin 15 – HTTP-Response gefunden und eine Möglichkeit, das Plugin zu konfigurieren, hier beschrieben. Demnächst etwas über reguläre Ausdrücke, damit auch die richtigen POST-Forms gefunden werden … :-)

Tags: , ,

Hinterlasse eine Antwort