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

To respond on your own website, enter the URL of your response which should contain a link to this post's permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post's URL again. (Find out more about Webmentions.)