it-swarm.com.de

Wie speichere ich eine mittlere Anzahl von Optionen?

Ich entwickle ein Plugin, das eine nicht zu geringe Anzahl von Einstellungen hat. Bisher gab es eine feste Anzahl von ihnen, daher speichere ich sie in einer Wordpress-Option. Jetzt überlege ich, den Benutzern die Möglichkeit zu geben, (eine beliebige Anzahl von) Stilen zu definieren, dh eine Reihe von Optionen. Da dies immer noch eher allgemeine Optionen sind, passt keine der im Codex aufgeführten Kategorien wirklich.

Das alles in einer Option zu speichern, ist natürlich keine gute Idee, aber das Erstellen einer ganzen Datenbanktabelle fühlt sich auch nicht richtig an. Was sind deine Empfehlungen?

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

1
Raphael

Die Hierarchie zum Speichern von Daten sieht ungefähr so ​​aus (von weniger funktional/komplex zu mehr):

  1. Transients API
  2. Options API
  3. Einstellungs-API
  4. Datenbanktabellen
  5. Benutzerdefinierter Dateicache

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

1
Rarst

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

Oder genauer: Verkapseln Sie, was variiert.

Da Sie im Moment nicht wissen, wie/wo Sie Ihre Einstellungen speichern sollen, erstellen Sie Objekte, die eine Schnittstelle zu Ihrem Shop bieten und die den gesamten Speicher vor dem Rest Ihres Plugins verbergen.

Einige Beispielcodes:

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') verwenden, unabhängig davon, welche Speicherebene Sie implementieren.

Sie können jetzt eine weitere myStore_xxxx-Klasse erstellen, die die myStore-Schnittstelle implementiert, z. für die Stile. Es funktioniert genauso, aber Sie können die Stile an einer anderen Stelle platzieren.

Normalerweise müssen Sie nur Einstellungen lesen und schreiben, sodass Sie hier in der Benutzeroberfläche nur zwei Funktionen benötigen.

Sie können dann - im Laufe der Zeit oder während Sie die Anzahl der Optionswerte/-stile erweitern - die Speichermethode ändern, ohne dass dies Auswirkungen auf Ihren Plug-in-Code hat.

4
hakre

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. Die Optionen sollten wie folgt benannt werden: $pluginname_style_$name.

Das Abrufen eines Stils mit bekanntem Namen ist sehr natürlich, idiomatisch und dann (hoffentlich) schnell. Das Abrufen/Löschen aller Stile ist aufgrund des Namensschemas problemlos möglich.

Vorausgesetzt, Benutzer erstellen nicht zu viele (d. H. Höchstens zehn, nicht hundert) Stile, sollte die Optionstabelle nicht zu stark aufgebläht werden.

1
Raphael

Die Settings API erstellt ein performantes Array und speichert Ihre Optionen in nur einem DB-Feld. Sie können dieses Feld von verschiedenen Seiten aus hinzufügen, solange Sie festlegen, dass dasselbe Feld (Abschnitt "Einstellungen" afaik) auf anderen Seiten verwendet werden soll. Vielleicht sollten Sie verschiedene Abschnitte für verschiedene Teile (d. H. Stile) verwenden, damit Sie sie in einer globalen verfügbaren $ var wie speichern können

anruf:

$my_plugin_styles = get_option('option_name');

<span style="<?php echo $my_plugin_styles->background; ?>">

oder (noch besser):

<span class="<?php echo $my_plugin_styles->background_class; ?>">
0
kaiser

sie können ein Array während des Datasets erstellen und es in einer Option für jeden neuen Stil speichern, beispielsweise:

$new['size'] = ...
$new['fixed'] = ...
$new['blabla'] = ...

update_option('new_option_name',$new);

ich hoffe du kommst auf die Idee.

0
Bainternet