Wie speichert man eine mittlere Anzahl von Optionen?

Ich entwickle ein Plugin mit einer nicht zu geringen Anzahl von Einstellungen. Bisher gab es eine feste Anzahl von ihnen, also speichere ich sie in einer WordPress-Option. Jetzt überlege ich, dass Benutzer (eine beliebige Anzahl) Stile definieren können, das sind Optionen. Da dies immer noch ziemlich allgemeine Optionen sind, passt keine der im Codex aufgeführten Kategorien wirklich.

Alles in einer Option zu speichern, ist eindeutig keine gute Idee, aber das Erstellen von ganzen databasetabellen fühlt sich auch nicht richtig an. Was sind deine Empfehlungen?

Beachte, dass ich eine Idee, die ich habe, als Antwort poste, um sie von der Frage zu trennen. Würde die Frage CW markieren, aber das scheint hier deaktiviert zu sein?

Solutions Collecting From Web of "Wie speichert man eine mittlere Anzahl von Optionen?"

Die Hierarchie der Datenspeicherung geht ungefähr so ​​(von weniger funktional / komplex zu mehr):

  1. Transienten-API
  2. Options-API
  3. Einstellungs-API
  4. databasetabellen
  5. Benutzerdefinierter Datei-Cache

Da aus Ihrer Beschreibung Optionen zu begrenzt und database zu komplex sind, würde ich auf Einstellungen schauen.

Um Ihre Frage am besten zu beantworten, schlage ich vor, sie nicht zu beantworten;)

Oder genauer: Umhüllen Sie, was variiert .

Da Sie im Moment nicht wissen, wie / wo Sie Ihre Einstellungen speichern sollen, erstellen Sie Objekte, die eine Schnittstelle zu Ihrem Geschäft bereitstellen und die das gesamte Speichern vom Rest des Plugins verbergen.

Ein Beispielcode:

interface myStore { const PREFIX = 'myStore'; public function get($name); public function set($name, $value); } /** * option storage: all in one wordpress option */ class myStore_Options implements myStore { private $data = null; private $optionName = ''; private init() { if (null===$this->data) { $this->optionName = myStore::PREFIX.'_options'; $this->data = get_option($this->optionName, array()); } } public function get($name) { if (array_key_exists($this->data, $name) return $this->data[$name]; return ''; } public function set($name, $value) { $this->data[$name] = $value; update_option($this->optionName, $this->data); } } $store = new MyStore_Options(); 

Überall in Ihrem Code können Sie dann $store->get('settingName') unabhängig davon, welche Speicherschicht Sie implementieren.

Sie können jetzt eine weitere myStore_xxxx-class erstellen, die die myStore-Schnittstelle implementiert, z. B. für die Stile. Es wird genauso funktionieren, aber Sie können die Stile an anderer Stelle platzieren.

Normalerweise müssen Sie nur Einstellungen lesen und schreiben, so dass Sie hier nur zwei functionen in der Oberfläche benötigen.

Sie können dann – im Laufe der Zeit oder während Sie die Anzahl der Optionen Werte / Stile erweitern – die Speichermethode ändern, ohne Ihren Plugin-Code zu beeinflussen.

Fügen Sie eine WordPress-Option pro Stil hinzu. Da jeder Stil eine feste Größe hat und an vielen Stellen verwendet wird, ist die Grundvoraussetzung für diese Technik im Codex erfüllt. Optionen sollten wie $pluginname_style_$name .

Einen Stil mit bekanntem Namen zu finden ist sehr natürlich, idiomatisch und (hoffentlich) schnell. Das Abrufen / Löschen aller Stile ist aufgrund des Benennungsschemas problemlos möglich.

Unter der Annahme, dass Benutzer nicht zu viele (dh höchstens zehn, nicht Hunderte) Stile erstellen, sollte die Optionstabelle nicht zu sehr aufgebläht werden.

Sie können ein Array als Dataset erstellen und es in einer Option für jeden neuen Stil speichern.

 $new['size'] = ... $new['fixed'] = ... $new['blabla'] = ... update_option('new_option_name',$new); 

Ich hoffe, du hast die Idee.

Das Einstellungs-API kümmert sich darum, ein performantes Array zu erstellen und Ihre Optionen in nur einem DB-Feld zu speichern. Sie können dieses Feld von verschiedenen Seiten aus hinzufügen, solange Sie definieren, das gleiche Feld (“Einstellungsbereich” afaik) auf anderen Seiten zu verwenden. Vielleicht sollten Sie verschiedene Abschnitte für verschiedene Teile (dh Stile) verwenden, so dass Sie sie in einer globalen Available $ Var wie speichern können

Anruf:

 $my_plugin_styles = get_option('option_name');  

oder (noch besser):