SchnellstartZentrale Einstellungen mit Ausnahmen je Website

Zentrale Einstellungen mit Ausnahmen je Website

Ein Must-Use-Plugin setzt die Schalter von Easy SVG und Easy SVG Pro per Code auf jeder Website, mit Ausnahmen je Website, Umgebung und Multisite-Netzwerk.

Beide Plugins speichern ihre Schalter in drei WordPress-Optionen. Ein Must-Use-Plugin filtert sie. So hat jede Website dieselben Werte, und du änderst sie an genau einer Stelle: im Code.

OptionWas drinsteht
easy_svg_settingsFreies Plugin: svg_upload, icons, max_mb
easy_svg_pro_featuresPro-Funktionsschalter, zum Beispiel collections, editor, sources, cli, presets
easy_svg_pro_settingsPro-Einstellungen: size_enabled, max_mb, tags_enabled, extra_tags, extra_attrs

1. Das Must-Use-Plugin

<?php
/**
 * Plugin Name: Agency Easy SVG settings
 * Description: Easy SVG and Easy SVG Pro switches for every site.
 */

defined( 'ABSPATH' ) || exit;

/**
 * Code defaults, then the network's values, then this site's values.
 */
function agency_easy_svg_config(): array {
	$config = array(
		'easy_svg_settings'     => array(
			'svg_upload' => true,
			'icons'      => true,
			'max_mb'     => 2,
		),
		'easy_svg_pro_features' => array(
			'collections' => true,
			'editor'      => true,
			'sources'     => true,
			'cli'         => true,
			'presets'     => true,
		),
		'easy_svg_pro_settings' => array(
			'tags_enabled' => false,
		),
	);

	// Example: never fetch preset sets on a local copy.
	if ( 'local' === wp_get_environment_type() ) {
		$config['easy_svg_pro_features']['presets'] = false;
	}

	if ( is_multisite() ) {
		$network = get_site_option( 'agency_easy_svg', array() );
		$config  = array_replace_recursive( $config, is_array( $network ) ? $network : array() );
	}

	$site = get_option( 'agency_easy_svg', array() );
	return array_replace_recursive( $config, is_array( $site ) ? $site : array() );
}

/**
 * Lay the configured keys over whatever the site has stored.
 */
function agency_easy_svg_force( $value, $option ) {
	$forced = agency_easy_svg_config()[ $option ] ?? array();
	return array_replace( is_array( $value ) ? $value : array(), $forced );
}

add_filter( 'option_easy_svg_settings', 'agency_easy_svg_force', 10, 2 );
add_filter( 'default_option_easy_svg_settings', 'agency_easy_svg_force', 10, 2 );
add_filter( 'option_easy_svg_pro_features', 'agency_easy_svg_force', 10, 2 );
add_filter( 'default_option_easy_svg_pro_features', 'agency_easy_svg_force', 10, 2 );
add_filter( 'option_easy_svg_pro_settings', 'agency_easy_svg_force', 10, 2 );
add_filter( 'default_option_easy_svg_pro_settings', 'agency_easy_svg_force', 10, 2 );

Schlüssel in der Konfiguration sind fest. Alles, was du weglässt, bleibt auf jeder Website unter Icons → Funktionen, Icons → Einstellungen und Icons → Konfigurator änderbar.

2. Einen Wert auf einer Website überschreiben

wp option update agency_easy_svg '{"easy_svg_pro_features":{"presets":false}}' --format=json

Eine Ausnahme entfernst du mit wp option delete agency_easy_svg (oder wp site option delete agency_easy_svg).

Woran du siehst, dass es geklappt hat

  • Icons → Funktionen zeigt die konfigurierten Schalter auf jeder Website eingeschaltet.
  • wp option get easy_svg_pro_features --format=json gibt deine Werte aus, auch auf einer Website, die ihre Einstellungen nie gespeichert hat.

Stolperfallen

Es muss ein Must-Use-Plugin sein. Das freie Plugin liest seine Schalter schon beim Laden, vor normalen Plugins und vor init. Filter aus einem normalen Plugin oder aus einem Hook kommen für SVG-Uploads zu spät.
  • Fest heißt fest. Ein erzwungener Schlüssel hat im wp-admin weiterhin seinen Schalter. Umschalten speichert zwar, aber beim nächsten Laden steht wieder der Wert aus deinem Code da. Sag deinen Kunden, welche Schalter dir gehören.
  • Die Lizenz entscheidet trotzdem. Ein erzwungener Pro-Schalter wirkt erst, wenn die Lizenz der Website aktiv ist. Bei Multisite deckt ein Platz das ganze Netzwerk ab.
  • Grenzen gelten weiter. max_mb wird auf 1 bis 20 MB begrenzt, egal was du einträgst. Unsichere Namen in extra_tags und extra_attrs (etwa script oder onclick) fliegen raus.