it-swarm.com.de

Wie kann ich es vermeiden, das Rad für benutzerdefinierte Felder in der Metabox meines Plugins neu zu erfinden?

Hier ist das Szenario:

In meinem Plugin möchte ich eine Metabox im Post/Page Editor anzeigen.

Ich möchte, dass die Metabox genau wie die Metabox "Benutzerdefinierte Felder" von WordPress aussieht (Weitere hinzufügen, löschen, aktualisieren, Dropdown-Liste automatisch füllen, neuen Link eingeben, AJAX magic usw.). mit ein paar kleinen unterschieden:

  • Anstelle von "Name" und "Wert" möchte ich "Ziel", "Name" und "Wert"

  • Anstatt sie alle als "öffentliche" benutzerdefinierte Felder zu speichern, die automatisch in der Metabox "WP Custom Fields" angezeigt werden, möchten wir, dass sie alle als ein einziges mehrdimensionales Array in einem "privaten" Feld mit Namensraum gespeichert werden , _myplugin_custom_fields = array( 1 => array( 'target' => 'mytarget1', 'name' => 'myname1', 'value' => 'myvalue1' ), 2 => array( 'target' => 'mytarget2', 'name' => 'myname2', 'value' => 'myvalue2' ) )

Ich habe den ganzen Tag durch das Wirrwarr von WP Core gebuddelt und konnte keinen einfachen Weg finden, um das durchzuziehen. Wenn ich mich nach meinem derzeitigen Verständnis weiterentwickle, dupliziere ich am Ende Hunderte Zeilen Kerncode aus zahlreichen PHP- und JS-Dateien.

Kann jemand hier in WordPress Answers-land mir helfen, die richtige Richtung einzuschlagen? Ich habe viel Erfahrung mit dem Hinzufügen und Nutzen von Metaboxen in Themes und Plugins, aber dieses hat mich total verblüfft.

Bitte sprechen Sie, wenn ich unklar bin.

Vielen Dank im Voraus an alle, die antworten!

4
SethMerrick

Klingt so, als würden wir an ähnlichen Dingen arbeiten. Ich bin mir nicht sicher, ob dies hilfreich sein wird, kann Ihnen aber einige andere Ideen geben.

Erster von dreiteiligen Blogbeiträgen - http://www.deluxeblogtips.com/2010/05/howto-meta-box-wordpress.html

Ich hoffe es hilft!

0

Ich speichere meine benutzerdefinierten Felder mit dem Namen _meta_whatever. Wenn Sie den Namen mit einem Unterstrich beginnen, zeigt WordPress die benutzerdefinierten Felder in der Dropdown-Box in den normalen Beiträgen an.

Zum Speichern in einem Array verwende ich so einen HTML-Code.

...
<input type="text" class="short" name="_events_meta[startDate]" id="_events_meta[startDate]" value="<?php if(!empty($meta['startDate'])) echo $meta['startDate']; ?>"/>
<input type="text" class="extrashort" name="_events_meta[startTime]" id="_events_meta[startTime]" value="<?php if(!empty($meta['startTime'])) echo $meta['startTime']; ?>"/>
...

Dies ist mein Code, den ich verwende, um die Meta-Werte abzurufen

...
$meta = get_post_meta($post->ID,'_events_meta',TRUE);
...

Jetzt habe ich ein assoziatives Array $meta, in dem der Schlüsselname in den Klammern im Attribut id- des Elements input- angegeben ist.

Zum Speichern verwende ich Code wie diesen

...
$new_data = $_POST['_events_meta'];
...
add_post_meta($post_id,'_events_meta',$new_data,TRUE);
...

So wird es als ein Datensatz in wp_postsmeta gespeichert

Hoffe das hilft und kommt von meiner Seite klar zum Ausdruck?

0
Guru 2.0