wake-up-neo.com

Bearbeiten von Post-Meta im Customizer

Ich arbeite an einem Plugin für benutzerdefinierte Felder im gesamten Administrator und versuche, so viele Speicherorte für Felder wie möglich zu erstellen. Bisher mache ich das für einige dieser Standorte erfolgreich:

  1. Beitragstypen
  2. Taxonomien
  3. Bemerkungen
  4. Benutzer
  5. Optionen (Seiten)
  6. Widgets
  7. Menüpunkte
  8. Anlagen
  9. Shortcodes
  10. Der Customizer (eine Art)

Natürlich versuche ich, für jeden meiner Standorte die entsprechende WordPress-API zu verwenden - * _post_meta * _term_meta usw., und die Dinge funktionieren recht gut.

Für die Standorte, die mit einem Element verknüpft sind, das eine URL hat (hauptsächlich die ersten 4, obwohl Anhänge auch URLs haben), habe ich Front-End-Formulare, mit denen Benutzer das aktuelle Element bearbeiten und seine benutzerdefinierten Felder speichern können. Dies geschieht über ein einzelnes Funktions-/Vorlagen-Tag, für das keine Argumente erforderlich sind. Alle Feldgruppen, die dem Element zugeordnet sind, werden automatisch angezeigt.

Das letzte Element, das ich haben möchte, bevor ich mein (Proof of) Concept für erfolgreich halte, ist die Unterstützung des Customizers. Die Verwendung der Standard-API ermöglicht es mir, ganz einfach mit Optionen/Design-Mods zu arbeiten, und ich bin an einem Punkt angelangt, an dem der "Customizer" -Pfad ziemlich funktional ist. Der einzige Nachteil meiner Implementierung scheint zu sein, dass ich die gesamte Gruppe mit Feldern als einzelnes Steuerelement anzeige. Dies ermöglicht mir Registerkarten, bedingte Logik und eine ordnungsgemäße Validierung (die von der bedingten Logik abhängt). Trotzdem verwende ich verschiedene Einstellungen (wie in WP_Customize_Setting), so dass postMessage und alles andere so ziemlich korrekt funktionieren, ohne etwas anderes hacken zu müssen.

Ich möchte jedoch, dass dieselben Speicherorte, die über URLs und Front-End-Formulare verfügen, auch problemlos zum Customizer hinzugefügt werden können. Ein Entwickler kann eine Post-Meta-Gruppe erstellen, die als normales Postfach auf dem Bearbeitungsbildschirm angezeigt wird. Mein Ziel ist es, dass er so etwas wie -> show_in_customizer () aufruft, damit diese Gruppe auch dort verwendet werden kann.

Ich weiß, dass viele Leute davon abraten, Beiträge im Customizer zu bearbeiten, und ich stimme ihnen bei vielen Gelegenheiten zu. Wenn es jedoch eine Einstellung für das Layout pro Post gibt, einige Farboptionen oder sogar etwas so Einfaches wie das abgebildete Bild, möchte ich diese Tür offen lassen.

Um auf den Punkt zu kommen, scheint dies eine ziemlich schwierige Aufgabe zu sein, da es zumindest Folgendes erfordert:

  1. Bestimmen, ob der verantwortliche Abschnitt im Customizer angezeigt werden soll. Das geht ganz einfach über die Eigenschaft "active_callback" von Abschnitten.
  2. Einspeisen von Daten in den Customizer: Dieser ist etwas knifflig. Selbst wenn Sie während der Vorschau einer Seite auf die Schaltfläche "Anpassen" klicken, wird der Customizer im Kontext des Administrators geladen und ich habe keinen direkten Zugriff auf das Objekt, das angezeigt wird. Was ich tue, ist, alle Daten, die ich benötige, in der Fußzeile der Seite zu sammeln und sie durch parent.someFunction an den Customizer zu senden, wenn die Seite geladen wird. Dies ist nicht ideal, funktioniert aber gut genug - ich rufe keinen Wert mehr als einmal ab/sende ihn, also bin ich glücklich. In der perfekten Welt können Benutzer mit dieser Funktion in Kombination mit dem active_callback eine Seite bearbeiten, auf einen Link zu einer anderen Seite klicken und die neu geladene Seite sofort bearbeiten. Wenn dies erledigt ist, erhält die neue Seite jedoch weder Anforderungsparameter noch Kopfzeilen, so dass es ziemlich praktisch ist, wenn es überhaupt nicht im Customizer war, so dass dies für mich nicht funktioniert.
  3. Überschreiben des Ergebnisses von get_*_meta mit den Werten aus dem Customizer bei normaler Anforderung (Nicht-PostMessage). Dieser Teil ist sehr einfach.
  4. Speichern der Daten: Hier schlägt meine Implementierung fehl :(

Wenn Sie auf die Schaltfläche "Speichern & Veröffentlichen" klicken, führt der Customizer eine wp_ajax-Anforderung aus. Die Anforderung enthält weiterhin die normale customized JSON als Aktualisierung, wenn ein Wert geändert wird. Da das Skript jedoch admin-ajax verwendet, kann ich nicht wissen, was wirklich gespeichert wird.

Die einzige Idee, die ich jetzt habe, ist, die wp.customize.previewer.query JavaScript-Funktion mit etwas in den Zeilen von zu überschreiben:

var query = wp.customize.previewer.query;
wp.customize.previewer.query = function( options ) {
    args = query.call( wp.customize.previewer, options );
    args.my_plugin_name_current_object = 'post_10';
    return args;
}

An dieser Stelle muss ich allerdings sehr vorsichtig sein, wenn ich den Parameter hinzufüge, und insgesamt wird die Implementierung langsam zu schmutzig.

Schließlich meine Frage: Hat jemand geschafft, ähnliche Funktionen im Customizer erfolgreich zu erreichen? Könnten Sie mir einen geeigneten Ansatz empfehlen, um diese Sache zu Ende zu bringen?

Bisher habe ich noch nichts spezielles für den Customizer entwickelt und (obwohl ich nicht vorhabe, jemanden zu beleidigen) bin ich überrascht, wie überkompliziert/überentwickelt einige Teile des Customizers erscheinen, während einige recht grundlegende Aspekte extrem halb zu sein scheinen -gebacken.

Ich weiß, dass ich keine bestimmten Codeausschnitte einbinde, aber die Frage scheint allgemein genug zu sein, zumindest für mich.

Danke im Voraus!

3

Bitte beachten Sie das Customize Posts Plugin. Es verfügt über einen WP_Customize_Post_Setting und einen WP_Customize_Postmeta_Setting zur Darstellung von Posts und Postmeta im Customizer.

2
Weston Ruter