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 🙂

Erwähnungen

  • Torsten Landsiedel
  • Florian Brinkmann
  • Torsten Landsiedel

Schreibe einen Kommentar

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

Falls du auf diesen Beitrag mit einem Artikel auf deiner eigenen Webseite geantwortet hast, kannst du hier die URL deines Beitrags eingeben. Dabei sollte es sich um die Permalink-URL handeln. Deine Antwort wird dann (möglicherweise nach der Moderation) auf dieser Seite angezeigt. Falls du deine Antwort aktualisieren oder entfernen möchtest, aktualisiere oder lösche deinen Beitrag auf deiner eigenen Webseite und gib die URL des Beitrags erneut ein. (Erfahre mehr über Webmentions.)