Core-Optionen auf eigener Settings-Seite verändern

Bei einem Projekt musste ich kürzlich auf einer Settings-Seite im Backend neben eigenen Optionen auch die Core-Option für den Inhalt der Startseite und für die Blogseite einbauen. Das war allerdings nicht so einfach, wie ich erst gedacht hatte, weil die Settings-API genau prüft, welche Optionen von einer Einstellungs-Seite abgeschickt werden dürfen und nur diese abspeichert.

Das »Problem« mit der Settings-API

Eigentlich ist es kein wirkliches Problem, sondern wünschenswert: bei Nutzung der Settings-API wird register_setting() genutzt, um Optionen zu registrieren, die von der API verarbeitet werden. Als ersten Parameter erwartet die Funktion den Namen der Options-Gruppe und als zweiten den Namen der Option, der als option_name in der Datenbank genutzt wird.

Beim Speichern der Einstellungen werden in der options.php nur die Formularwerte für die Optionen verarbeitet, die über register_setting() registriert wurden. In meinem Fall konnte ich für die Core-Optionen allerdings nicht register_setting() nutzen, weshalb die API die Optionen beim Speichern einfach ignoriert hat.

Die Lösung: allowed_options-Filter

Die Lösung zu dem Problem ist der allowed_options-Filter, mit dem das Array der erlaubten Optionen für die Optionengruppen gefiltert werden kann. So konnte ich die Optionen show_on_front, page_on_front und page_for_posts meiner Gruppe hinzufügen und sie von der API speichern lassen:

add_filter( 'allowed_options', function( $allowed_options ) { if ( ! is_array( $allowed_options ) || ! isset( $allowed_options['flobn_settings'] ) ) { return $allowed_options; } array_push( $allowed_options['flobn_settings'], 'show_on_front', 'page_on_front', 'page_for_posts' ); return $allowed_options; }, 20 );
Code-Sprache: PHP (php)

3 Reaktionen zu »Core-Optionen auf eigener Settings-Seite verändern«

    1. Einfach nur, damit die ganzen Einstellungen, die beim Einrichten einer Site in einer Multisite genutzt werden, auf einer Seite sind 🙂

Schreibe einen Kommentar

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