Sie sollten mit benutzerdefinierten Feldern in WordPress vertraut sein. Wir verwenden sie in einem Beitrag oder auf einer Seite, um zusätzliche Daten hinzuzufügen. In WordPress werden Anhänge auch als Beiträge gespeichert, sodass auch benutzerdefinierte Felder verfügbar sind.
Heute werden wir sehen, wie wir einige benutzerdefinierte Felder hinzufügen können, damit Anhänge mehr Informationen als nur die Standarddaten enthalten können.
Zunächst erstellen wir ein Plugin, um die benutzerdefinierten Felder von Anhängen zu bearbeiten. Es wird eine Reihe von Optionen erhalten, backen Sie sie, damit sie Bestandteil des Formulars werden, wenn Sie einen Anhang bearbeiten, und speichern Sie sie in der Datenbank.
Dafür verwenden wir zwei WordPress-Hooks:
attachment_fields_to_edit
das Bearbeitungsformular bearbeitenattachment_fields_to_save
um die benutzerdefinierten Felder zu speichernIch werde diesen Teil schnell durchgehen, da dies nicht der Hauptzweck dieses Tutorials ist.
Erstellen Sie einen neuen Ordner im Plugins-Verzeichnis (wp-content / plugins / medienfelder / zum Beispiel) und legen Sie eine Datei (genannt plugin.php) Innerhalb. Setzen wir auch eine Datei mit dem Namen custom_media_fields.php das wird unsere Optionen halten.
Das ist was dein plugin.php Datei sollte auf den ersten Blick aussehen:
/ * Plugin-Name: Wptuts + Custom Media Fields Plugin-URI: Beschreibung: Benutzerdefinierte Felder für Anhänge erstellen Version: 0.1 Autor: Guillaume Voisin Autor-URI: http://wp.tutsplus.com/author/guillaumevoisin Lizenz: GPL2 * / required_once (plugin_dir_path ( __FILE__). '/Custom_media_fields.php'); Klasse Wptuts_Custom_Media_Fields private $ media_fields = array (); Funktion __construct ($ fields) öffentliche Funktion applyFilter ($ form_fields, $ post = null) Funktion saveFields ($ post, $ attachment) $ cmf = neue Wptuts_Custom_Media_Fields ($ attchments_options);
Dies ist die Basis, die wir in den folgenden Abschnitten ausfüllen werden. Definieren wir zunächst unsere Optionen.
Fügen Sie in der anderen Datei einige Optionen hinzu, um das Bearbeitungsformular für Anhänge zu verbessern. In diesem Tutorial werden Optionen zur Verbesserung der Bilder behandelt. Beispielsweise fügen wir Felder für Urheberrecht, Autorbeschreibung, Wasserzeichen, Bewertung und Bilddisposition hinzu.
$ themename = "twentytwelve"; $ attchments_options = array ('image_copyright' => array ('label' => __ ('image copyright', $ themename), 'input' => 'text', 'hilft' => __ ('Wenn Ihr Bild geschützt ist durch Urheberrechte ', $ themename),' application '=>' image ',' exclusions '=> array (' audio ',' video '),' required '=> true,' error_text '=> __ (' Copyright-Feld erforderlich ', $ themename)),' image_author_desc '=> array (' label '=> __ (' Beschreibung des Image-Autors ', $ themename),' input '=>' textarea ',' application '=>' image ', 'Ausschlüsse' => array ('audio', 'video'),), 'image_watermark' => array ('label' => __ ('Bildwasserzeichen', $ themename), 'input' => 'Ankreuzfeld', 'application' => 'image', 'exclusions' => array ('audio', 'video')), 'image_stars' => array ('label' => __ ('image rating', $ themename), ' Eingabe '=>' Radio ',' Optionen '=> Array (' 0 '=> 0,' 1 '=> 1,' 2 '=> 2,' 3 '=> 3,' 4 '=> 4) , 'application' => 'image', 'exclusions' => array ('audio', 'video')), 'image_disposition' => array ('label' => __ ('image di sposition ', $ themename),' input '=>' select ',' options '=> array (' portrait '=> __ (' portrtait ', $ themename),' landscape '=> __ (' landscape ', $ Themenname)), 'Anwendung' => 'Bild', 'Ausschlüsse' => Array ('Audio', 'Video')));
Es ist im Grunde ein assoziatives Array, das diese Parameter enthält:
Etikette
- Der Feldname, der angezeigt wirdEingang
- der Eingabetyp (z. B. Text, Auswahl, Radio,…)hilft
- Informationen, die dem Benutzer helfen, das Feld auszufüllenAnwendung
- welche attchment-Mime-Art angewendet werden sollAusschlüsse
- welche attchment mime type ausschließen sollerforderlich
- ist das Feld erforderlich? (Standard falsch
)error_text
- optionales Feld zur Beschreibung des Fehlers (falls erforderlich auf gesetzt wahr
)Optionen
- optionales Feld für Radio und Select-Typenshow_in_modal
- ob das Feld in modal angezeigt werden soll oder nicht (Standardeinstellung) wahr
)show_in_edit
- ob das Feld in der klassischen Bearbeitungsansicht angezeigt werden soll oder nicht (Standardeinstellung) wahr
)extra_rows
- zusätzliche Zeilen zum Anzeigen des Inhalts (innerhalb desselben "tr
" Etikett)tr
- zusätzliche Zeilen ("tr
" Etikett)Die hervorgehobenen Optionen stellen Optionen dar, mit denen wir manuell umgehen, während andere Standardeinstellungen sind, die WordPress automatisch verarbeitet.
Wenn wir es mit Bildern zu tun haben, setzen wir die Anwendung
Parameter zu "Bild
". Es wird tatsächlich für alle Arten von Bildern gelten, deren Mime-Typ mit"Bild
" sowie image / jpeg
, image / png
und so weiter. Sie könnten das ausschließen gif
MIME-Typ, indem Sie ihn beispielsweise in das Ausschlussfeld setzen.
Nun sind unsere Optionen festgelegt, lasst uns in die Haken greifen.
Wie bereits erwähnt, behandeln wir zwei Haken.
Wir binden unsere beiden Funktionen an diese Hooks in der Konstruktormethode.
Funktion __construct ($ fields) $ this-> media_fields = $ fields; add_filter ('attachment_fields_to_edit', array ($ this, 'applyFilter'), 11, 2); add_filter ('attachment_fields_to_save', array ($ this, 'saveFields'), 11, 2);
Nun sehen wir uns diese Haken im Detail an.
attachment_fields_to_edit
Es hat zwei Parameter:
$ form_fields
- Ein Feld von Feldern, die im Bearbeitungsformular für Anhänge enthalten sind$ post
- Objekt, das den Anhang selbst darstelltWir werden die verwenden $ form_fields
Parameter, um unsere eigenen Felder zusammenzuführen und jedes dieser Felder mit den Anforderungen für den Anhang zu vergleichen (zB MIME-Typ).
public function applyFilter ($ form_fields, $ post = null) // Wenn unser Fields-Array nicht leer ist, wenn (! empty ($ this-> media_fields)) // Wir durchsuchen unseren Optionssatz nacheach ($ this-> media_fields) as $ field => $ values) // Wenn das Feld mit dem aktuellen Anhang-Mime-Typ // übereinstimmt und nicht zu den Ausschlüssen if (preg_match ("/". $ values ['application']. "/", $ post-> post_mime_type) &&! in_array ($ post-> post_mime_type, $ values ['exclusions']))) // Wir erhalten den bereits gespeicherten Feld-Meta-Wert $ meta = get_post_meta ($ post-> ID, '_'. $ field, true); // Definiere den Eingabetyp standardmäßig auf 'text' $ values ['input'] = 'text'; // Und setze es auf das Feld, bevor du es erstellt hast $ values ['value'] = $ meta; // Wir fügen unser Feld in das $ form_fields-Array ein $ form_fields [$ field] = $ values; // Wir geben das ausgefüllte Array $ form_fields zurück und geben $ form_fields zurück.
In diesem Schritt sollten Sie das Formular zum Bearbeiten von Anhängen mit den neuen Feldern, die wir hinzugefügt haben, verbessern lassen. Sie werden jedoch wie Texteingaben aussehen. Wir müssen nun verschiedene Arten von Eingängen berücksichtigen (Radio, Checkbox usw.)..
Lassen Sie uns also unsere Funktion bearbeiten, um damit umzugehen. Ersetze das $ values ['input'] = 'text';
mit dem folgenden Code:
switch ($ values ['input']) default: case 'text': $ values ['input'] = 'text'; brechen; case 'textarea': $ values ['input'] = 'textarea'; brechen; case 'select': // Der Typ ist nicht vorhanden, daher wird die HTML-Datei manuell erstellt. // Dafür müssen wir den Eingabetyp auf 'html' setzen. $ values ['input'] = 'html'; // Erstellen Sie das Auswahlelement mit dem richtigen Namen (entspricht dem Element, das WordPress für benutzerdefinierte Felder erstellt). $ Html = ''; // Setzt den HTML-Inhalt $ values ['html'] = $ html; brechen; case 'checkbox': // Checkbox-Typ existiert nicht entweder $ values ['input'] = 'html'; // Aktiviere das Kontrollkästchen oder nicht, wenn ($ meta == 'on') $ checked = 'checked = "checked"'; else $ checked = "; $ html = ''; $ values ['html'] = $ html; break; case 'radio': // Radiotyp ist nicht vorhanden entweder $ values ['input'] = 'html'; $ html =" ; if (! empty ($ values ['options'])) $ i = 0; foreach ($ values ['options'] als $ k => $ v) if ($ meta == $ k) $ checked = 'checked = "checked"'; else $ checked = "; $ html. = '
'; $ i ++; $ values ['html'] = $ html; brechen;
Jetzt können wir gängige HTML-Elemente erstellen. Schauen wir uns unser Formular zur Bearbeitung von Anhängen an. Es sollte genau so aussehen:
Die benutzerdefinierten Felder werden, je nachdem, ob Sie für ihre modalen Optionen "true" festgelegt haben, auch im modalen Medienformular angezeigt, wenn Sie einen Beitrag bearbeiten.
Benutzerdefinierte Felder in modalJetzt werden unsere Felder in unserem Formular zur Bearbeitung von Anhängen angezeigt. Wir müssen sie in der Datenbank speichern. Dafür verwenden wir den zweiten Haken.
attachment_fields_to_save
Dieser Haken hat auch zwei Parameter:
$ post
- Array
welche die Attachment-Entität darstellt$ Anhang
- enthält alle Felder, die an den Anhang angehängt sindFüllen wir nun die Funktion aus saveFields
Wir sind im vorherigen Abschnitt gegangen.
function saveFields ($ post, $ attachment) // Wenn unser Fields-Array nicht leer ist if (! empty ($ this-> media_fields)) // Durchsuchen Sie diese Felder füreach ($ this-> media_fields) als $ field => $ Werte) // Wenn dieses Feld übergeben wurde (ist in der $ attachment-Variablen vorhanden) if (isset ($ attachment [$ field]))) // Wenn das übergebene Feld leer ist // Wir fügen Fehler in das Postobjekt ein Den "error_text" -Parameter setzen wir in den Optionen if (strlen (trim ($ attachment [$ field])) == 0) $ post ['errors'] [$ field] ['errors'] [] =] __ ($ Werte ['error_text']); // Andernfalls aktualisieren wir das benutzerdefinierte Feld, sonst update_post_meta ($ post ['ID'], '_'. $ Field, $ attachment [$ field]); // Andernfalls löschen wir es, falls es bereits existiert. Else delete_post_meta ($ post ['ID'], $ field); return $ post;
Ok, jetzt sind unsere benutzerdefinierten Felder in der Datenbank gespeichert und stehen für das Frontend zur Verfügung.
Objekt
im ersten und einem Array
in der zweiten.update_post_meta
erstellt das Meta, falls es nicht existiert._
"damit sie nicht in den Metaboxen der benutzerdefinierten Felder auf Nachbearbeitungsseiten aufgeführt werden.Seit Version 3.5 scheint es immer noch keine Fehler in Anhangbearbeitungsformularen zu geben. Ich habe versucht, den Kerncode zu untersuchen, und obwohl der Fehler behoben sein sollte (http://core.trac.wordpress.org/ticket/13810), scheint es nicht.
Für den Ajax-Sicherungsvorgang ist es sicher, dass es noch nicht wie in der ajax-actions.php
Datei:
$ errors = $ post ['errors']; // @todo kehre zurück und zeige mich!
Im Moment funktionieren Fehler jedoch nicht richtig, aber der Code ist so gemacht, dass, wenn diese Fehler behoben sind, dies funktioniert.
Um diese benutzerdefinierten Felder in Ihren Vorlagen zu verwenden, müssen Sie nur Post-Metas auf dieselbe Weise abrufen wie bei regulären Posts. Vergessen Sie nicht, das "_
"Präfix zu den Schlüsseln der benutzerdefinierten Felder.
Zum Beispiel könnte man das so machen:
Echo "
Je nach Ihren Bedürfnissen gibt es mehrere Verbesserungspunkte:
Zögern Sie nicht, uns Ihre Ideen mitzuteilen, wie Sie dieses Plugin verbessern können und was Sie von solchen Funktionen erwarten würden.