Settings API:
WordPress Standardoptionsseiten erweitern

Philip Hetjens, 5. August 2009 12:46 Uhr, 3 Kommentare Kommentare

Die Settings-API ist ein einfacher Weg die Optionen eines Plugins in die Standardoptionsseiten von WordPress zu integrieren. Für Plugins mit vielen Optionen eignet sich die API nicht, da dann die Seiten überladen wären, aber für kleine Plugins mit wenigen Optionen ist sie ideal. Der Codex erklärt die Settings-API schon ganz gut, aber ich hatte trotzdem ein paar Probleme und darum hier dieses Tutorial.

Alle Aufrufe der Settings-API sollten im Hook ‘admin_init’ gemacht werden. Die zwei wichtigsten Aufrufe der API sind die beiden Funktionen add_settings_field zum Anzeigen einer Option und register_setting zum Speichern. Hier zunächst ein Beispiel. Hier wird ein Textfeld auf der “Schreiben”-Optionsseite hinzugefügt:

add_action('admin_init', 'test_admin_init');
function test_admin_init() {
  add_settings_field(
    'test_option',
    '<label for="test_option">Test</label>',
    'test_option',
    'writing',
    'default',
    array()
  );
  register_setting('writing','test_option');
}

function test_option() {
  $value = get_option('test_option');
  echo '<input type="text" class="regular-text"
    id="test_option" name="test_option" value="'.$value.'" />';
}

Fangen wir mit der einfachen Funktion an: register_setting

register_setting sorgt dafür, dass eine Option gespeichert wird sobald auf der entsprechenden Seite der Speichern-Button gedrückt wurde. Sie hat zwei Parameter. Der erste Parameter gibt an auf welcher Seite die Option hinzugefügt wurde und beim Speichern mitgespeichert werden soll. Der zweite Parameter ist der Name der Option. Genau unter diesem Namen wird die Option auch in der Datenbank abgelegt. In dem Fall oben ist es die Option test_option auf der Seite writing. Optionen können auf allen acht Standardoptionsseiten von WordPress hinzugefügt werden:

  • general
  • writing
  • reading
  • discussion
  • media
  • privacy
  • permalink
  • misc

Die andere Funktion add_settings_field hat einige Parameter mehr.

add_settings_field(
  $option_name,
  '<label for="'.$option_name.'">'.
    $option_description.
  '</label>',
  $callback_function_name,
  $page,
  'default',
  array()
);

Ich denke die meisten Parameter sind so bereits klar. Hier einige Anmerkungen:
Der zweite Parameter gibt den Text vor dem Optionsfeld aus. Bei WordPress ist es üblich, dass dieser Text ein Label ist (also den Fokus an das Input-Element weitergibt). Das geschieht aber nicht automatisch und muss extra angegeben werden. Mit diesem Funktionsaufruf wird noch nicht das Eingabefeld angezeigt. Darum kümmert sich die Callback-Funktion. Hier das passende Beispiel:

function test_option() {
  $value = get_option('test_option');
  echo '<input type="text" class="regular-text"
    id="test_option" name="test_option" value="'.$value.'" />';
}

Die Funktion muss den aktuellen Wert selbst laden und anschließend das komplette Input-Element ausgeben. Der Name des Input-Elements muss der Name der Option sein (s. register_setting). Bitte nicht die ID vergessen, sonst funktioniert das label nicht.

Gruppieren

Wenn das Plugin mehr als eine Option hat, ist es sinnvoll die Optionen zu gruppieren. Dafür muss zuerst eine Gruppe anlegt werden und anschließend können die Optionen dieser Gruppe zuordnen werden. Gruppe anlegen:

add_action('admin_init', 'test_admin_init');
function test_admin_init() {
  add_settings_section(
    'test_section',
    'Test Titel',
    'test_section_description',
    'writing'
  );
  ...
}

function test_section_description() {
  echo '<p>info</p>';
}

Die Callback-Funktion gibt die Beschreibung zu der Gruppe aus und wird vor den Optionsfeldern angezeigt. Damit sie richtig formatiert wird, sollte in der Callback-Funktion auch ein Absatz ausgegeben werden. Um ein Optionsfeld dieser Gruppe zuzuordnen, muss nur der vorletzte Parameter in der add_settings_field von ‘default’ auf den Sectionname (im Beispiel ‘test_section’) geändert werden. Beispiel:

add_settings_field(
  'test_option',
  '<label for="test_option">Test</label>',
  'test_option',
  'writing',
  'test_section',
  array()
);

Best Practise

Ich habe jetzt schon einige male die Settings-API benutzt. Dabei wurde mir eins klar. Es ist wichtig die Bezeichner überall gleich zu wählen, sonst kommt man durcheinander. Was meine ich damit: Im Falle der test_option habe ich an allen Stelle test_option verwendet:

  • Optionsname
  • Name der Callback-Funktion (ggf. mit einheitlichem Prefix versehen)
  • Name und ID des Input-Elements

Das Gleiche gilt natürlich auch für die Section und deren Callback-Funktion. Wenn möglich sollte auch eine Vereinheitlichung über Plugingrenzen angestrebt werden.

Die Settings-API unterstützt auch die objekt-orientierte Programmierung. Alle Callback-Funktionen können auch als array mit Verweis auf &$this angegeben werden.

Weiterempfehlen

Mehr lesen

wpSEO: Benutzen wir bei  Blogwerk schon sehr lange

6.8.2009, 10 KommentarewpSEO:
Benutzen wir bei Blogwerk schon sehr lange

wpSEO ist ein klasse Plugin für Wordpress und der Entwickler gibt gute Hilfe.

Feedburner + Wordpress: Neues Plugin bietet  Zugriff auf verschiedene Feeds

3.8.2009, 0 KommentareFeedburner + Wordpress:
Neues Plugin bietet Zugriff auf verschiedene Feeds

Das Feedsmith-Plugin ist alt und nicht so flexibel. Mein neues Plugin räumt damit auf.

Privates Blog: Anmeldung bevor  das Blog angezeigt wird

1.8.2009, 2 KommentarePrivates Blog:
Anmeldung bevor das Blog angezeigt wird

Dieses Plugin zeigt jedem nicht angemeldeten Besucher des Blogs zuerst den Wordpress-Anmeldebildschirm. Somit kann ein privates Blogs eingerichtet werden.

Wordpress 2.8 Widget-API: Widgets objekt-orientiert entwickeln

27.11.2009, 0 KommentareWordpress 2.8 Widget-API:
Widgets objekt-orientiert entwickeln

Mit Wordpress 2.8 wurde eine neue Widget-API eingeführt. Durch die neue Schnittstelle wurde die Widgetentwicklung objekt-orientiert und viel einfacher.

3 Kommentare

  1. Christian Leu
    schrieb am 6. August 2009 um 14:02 Uhr (#)

    öhm, wie integrierst du die Code Beispiele mit Zeilennummer und allem drum und dran? Ein Plugin?

  2. Schreibt hier auf dem Blog Philip Hetjens
    schrieb am 6. August 2009 um 19:19 Uhr (#)

    Hi Leu,

    per Hand. Nein, Scherz.

    Den JavaScript Syntax-Highlighter gibt es hier:
    http://alexgorbatchev.com/wiki/SyntaxHighlighter

    Und das WordPress-Plugin gibt’s hier: http://viper007bond.com/w…s/syntaxhighlighter/

    Philip

  3. Christian Leu
    schrieb am 7. August 2009 um 08:20 Uhr (#)

    @philip
    Danke für den Link zum Plugin. Ich konnte das für meine Latitude Basteleien gerade gut gebrauchen.

Diesen Artikel kommentieren

Wir sind sehr an einer offenen Diskussion interessiert, behalten uns aber vor, beleidigende Kommentare sowie solche, die offensichtlich zwecks Suchmaschinenoptimierung abgegeben werden, zu editieren oder zu löschen. Mehr dazu in unseren Kommentarregeln.