Optionen registrieren

Zunächst sollte man die Optionen, welche man verwenden möchte bei der Settings-API registrieren. Dies wird mit dem Befehl register_setting() erledigt.

1
2
3
4
5
6
7
8
9
10
/**
 * Plugin initialisieren
 */

function options_init() {
    register_setting(
        'my-options-group', // Optionsgruppe
        'my-options-name',  // Optinsname
        'options_validate'  // Callback zur Validierung
    );
}

Die Funktion register_setting() erlaubt drei Optionen.

$option_group (string) (erforderlich)
Der Name der Optionsgruppe. Wird später für die Funktion settings_fields() benötigt.
Default: None

$option_name (string) (erforderlich)
Der Name der Option. Dieser wird in der Datenbank verwendet.
Default: None

$sanitize_callback (string) (optional)
Die Callback Function um die Optionen zu prüfen.
Default: None

Optionsseite zu den Einstellungen hinzufügen

Nun wird noch eine Optionsseite gebraucht, denn irgendwo möchte man ja auch etwas einstellen können. In diesem Beispiel wird die Optionsseite in das Einstellungsmenü vom Dashboard hinzugefügt. Hierfür wird add_options_page() genutzt.

1
2
3
4
5
6
7
8
9
10
11
12
/**
 * Menüpunkt zu den Einstellungen im Dashboard hinzufügen
 */

function options_menu() {
    add_options_page(
        'My Options',       // Seitentitel
        'My Options',       // Menütitel
        'manage_options',   // Berechtigung
        'my-options',       // Slug
        'options_page'      // Callback der Optionsseite
    );
}

Die Optionsseite

Die eigentliche Optinsseite wird dann wie folgt generiert.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
/**
 * Die Optionsseite
 */

function options_page() {
    ?>
    <div class="wrap">
        <h2>My Options</h2>
        <form method="post" action="options.php">
            <?php
            settings_fields('my-options-group');        // Optionsgruppe
            $options = get_option('my-options-name');   // Optionsname
            ?>

            <div>
                <div style="display:inline-block; width:100px;">Checkbox</div>
                <div style="display:inline-block;"><input name="my-options-name[checkbox]" type="checkbox" value="1" <?php checked('1', $options['checkbox']); ?> /></div>
            </div>

            <div>
                <div style="display:inline-block; width:100px;">Text</div>
                <div style="display:inline-block;"><input type="text" name="my-options-name[sometext]" value="<?php echo $options['sometext']; ?>" /></div>
            </div>

            <?php
            submit_button();
            ?>
        </form>
    </div>
    <?php
}

Optionen validieren

Um zu verhindern, dass irgendwelcher Unsinn sich in die Optionen einschleicht, sollten diese natürlich auch validiert werden. Soll heißen, es wird geprüft, dass auch das drin steht, was erwartet wird.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
 * Einstellungen validieren
 *
 * @param array $input
 * @return array $output
 */

function options_validate($input) {
    // Die Checkbox
    $output['checkbox'] = ($input['checkbox'] == 1 ? 1 : 0);

    // Das Textfeld, in dem wir kein HTML erlauben wollen.
    $output['sometext'] = wp_filter_nohtml_kses($input['sometext']);

    return $output;
}

Hier können nun also diverse Filter auf die Optionen angewendet, oder die Werte auch durch weitere Funktionen geprüft werden. Dies ist besonders bei Textfeldern wichtig, da man ja nicht immer will, dass dort HTML erlaubt ist oder Ähnliches. WordPress hat da ne Menge Filter für solche Aufgaben parat :-)

Aktionen abfeuern

Zu guter Letzt müssen natürlich noch ein paar Aktionen abgefeuert werden, denn nur mit den Funktionen kann WordPress recht wenig anfangen. Also muss WordPress noch irgendwie klar gemacht werden, was es mit den Funktionen machen soll.

1
2
3
4
5
/**
 * Actions abfeuern
 */

add_action('admin_init', 'options_init');   // Optionen initialisieren
add_action('admin_menu', 'options_menu');   // Menü hinzufügen
Artikel weiterempfehlen
Werbung

Hinterlasse eine Antwort

Ihre Email-Adresse wird nicht veröffentlicht. Pflichtfelder sind durch * markiert.

Sie können folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>