Anzeigen von Metaboxen gemäß dem aktuellen Beitragsformat

Heute möchte ich Ihnen zeigen, wie Sie mit benutzerdefinierten Metaboxen fortfahren können und wie sie entsprechend den Postformaten verwendet werden sollen.

Wir werden nicht darauf eingehen, wie man wiederverwendbare benutzerdefinierte Metaboxen erstellt, da dies bereits in einem vorherigen Thema behandelt wurde. Wenn Sie also Probleme haben, lesen Sie bitte diesen Artikel.


Einführung

Das Wichtigste zuerst: Wenn Sie noch nie davon gehört haben, können Sie mit Post-Formaten einen Beitrag auf verschiedene Arten anzeigen, je nachdem, welches "Format" Sie gesetzt haben (Bild, Link, Galerie usw.)..

Um sicher zu sein, dass Ihr Design "Postformate" enthält, prüfen Sie, ob es verschiedene Formate akzeptiert, indem Sie nach dieser Funktion suchen:

 add_theme_support ('postformate', array ('link', 'quote'));

In diesem Beispiel können Sie nun zwei Postformate verwenden: 'link' und 'quote'..

Die Idee besteht darin, eine Metabox nur anzuzeigen, wenn das Optionsfeld Post Post Format rechts markiert ist. Dafür verwenden wir Hooks (PHP) und jQuery (JavaScript)..


Schritt 1 Hinzufügen benutzerdefinierter Metaboxen

Wir definieren ein Array von Metaboxen, das nur für Posts gilt (Sie können es in das Feld schreiben.) Functions.php Datei Ihres Themas). Es gibt verschiedene Standardoptionen (Standort, Priorität), auf die wir uns nicht konzentrieren werden (siehe Artikel zu wiederverwendbaren benutzerdefinierten Metaboxen)..

Definieren Sie Metaboxen

neben dem Felder Wir definieren, was im folgenden Code wichtig ist, ist der display_condition Variable, die verwendet wird, um Metaboxen entsprechend dem aktuellen Postformat anzuzeigen / auszublenden. Es stimmt mit der ID des Post-Format-Optionsfelds überein.

 $ metaboxes = array ('link_url' => array ('title' => __ ('link information', 'twentyeleven'), 'applyableto' => 'post', 'location' => 'normal', 'display_condition' => 'post-format-link', 'priority' => 'low', 'fields' => array ('l_url' => array ('title' => __ ('link url:', 'twentyeleven') , 'type' => 'text', 'description' => ", 'size' => 60))) 'quote_author' => array ('title' => __ ('quote author', 'twentyeleven') , 'applyableto' => 'post', 'location' => 'normal', 'display_condition' => 'post-format-quote', 'priority' => 'low', 'fields' => array ('q_author.) '=> array (' title '=> __ (' quote author: ',' twentyeleven '),' type '=>' text ',' description '=>,' size '=> 20))));

Für dieses Tutorial fügen wir nur eine grundlegende Texteingabe für jede Metabox hinzu. Seien Sie sicher zu überprüfen Der Feldschlüssel ist eindeutig oder es funktioniert nicht richtig.

Jetzt erstellen wir drei Funktionen zum Hinzufügen, Aktualisieren / Speichern und Anzeigen der Metaboxen.

Erstellen Sie Metaboxen

 add_action ('admin_init', 'add_post_format_metabox'); Funktion add_post_format_metabox () globale $ Metaboxen; if (! empty ($ metaboxes)) foreach ($ metaboxes als $ id => $ metabox) add_meta_box ($ id, $ metabox ['title'], 'show_metaboxes', $ metabox ['applyableto'], $ metabox) ['location'], $ metabox ['Priorität'], $ id); 

Grundsätzlich verwenden wir nur unsere zuvor definierten Optionen, um diese Metaboxen hinzuzufügen.

Metaboxen anzeigen

 Funktion show_metaboxes ($ post, $ args) globale $ Metaboxen; $ custom = get_post_custom ($ post-> ID); $ fields = $ tabs = $ metaboxes [$ args ['id']] ['fields']; / ** Nonce ** / $ output = ''; if (sizeof ($ fields)) foreach ($ fields als $ id => $ field) switch ($ field ['type']) default: Schreibweise "text": $ output. = ''; brechen;  echo $ output; 

Bisher sollten wir dies auf einem neuen Post-Admin-Bildschirm haben:

Speichern Sie Metaboxen

 add_action ('save_post', 'save_metaboxes'); Funktion save_metaboxes ($ post_id) globale $ Metaboxen; // nonce prüfen wenn (! wp_verify_nonce ($ _POST ['post_format_meta_box_nonce'], Basisname (__FILE__))) return $ post_id; // autosave prüfen wenn (definiert ('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $ post_id; // Berechtigungen prüfen if ('page' == $ _POST ['post_type']) if (! current_user_can ('edit_page', $ post_id)) return $ post_id;  elseif (! current_user_can ('edit_post', $ post_id)) return $ post_id;  $ post_type = get_post_type (); // Durchlaufen Sie die Felder und speichern Sie die Daten füreach ($ metaboxes als $ id => $ metabox). // Prüfen Sie, ob die Metabox für den aktuellen Beitragstyp gilt, wenn ($ metabox ['applyableto'] == $ post_type) $ fields = $ metaboxes [$ id] ['fields']]; foreach ($ fields als $ id => $ field) $ old = get_post_meta ($ post_id, $ id, true); $ new = $ _POST [$ id]; if ($ new && $ new! = $ old) update_post_meta ($ post_id, $ id, $ new);  elseif ("== $ new && $ old ||! isset ($ _POST [$ id]))) delete_post_meta ($ post_id, $ id, $ old);

Ok, jetzt sind wir fertig und können Post-Metas zu jedem Artikel hinzufügen, aktualisieren und in Metaboxen anzeigen. Wir können uns nun mit unserem Problem beschäftigen: Zeigt die richtige Metabox an, die dem aktuellen Postformat entspricht.


Schritt 2 Zeigen Sie die richtige Metabox zum richtigen Zeitpunkt an

Dafür werden wir verwenden jQuery um Show-, Hide- und Radio Change-Ereignisse zu behandeln.

Um Inline-JavaScript nur im Admin-Bereich hinzuzufügen, können Sie diesen Action-Hook verwenden:

 add_action ('admin_print_scripts', 'display_metaboxes', 1000);

Die Priorität ist auf 1000 gesetzt, um sicherzustellen, dass jQuery zuerst geladen wurde.

Wir könnten einen genaueren Haken setzen, wie admin_print_scripts-post oder admin_print_scripts-post-new, Wenn dies jedoch der Fall ist, wird jQuery aufgerufen, nachdem unser Skript gedruckt wurde.

Wenn wir Postformate zu benutzerdefinierten Posttypen hinzufügen, wäre es außerdem nicht sehr praktisch, alle möglichen Konfigurationen hinzuzufügen.

Was wir tun, ist (über PHP) eine JavaScript-Zeichenfolge zu erstellen, die eine Liste von IDs (den Feldschlüssel oben) enthält, die durch ein Komma getrennt sind. Es wird verwendet, um alle Metaboxen auszublenden, außer denjenigen, die dem aktuellen Postformat entsprechen.

Wir werden auch (immer noch über PHP) ein JavaScript-Objekt erstellen, das wir verwenden, um die ID eines Optionsfelds nach dem Format an die ID einer Metabox zu binden.

 function display_metaboxes () globale $ Metaboxen; if (get_post_type () == "post"):?>   

Und voila! Jetzt können Sie Postformate hin und her wechseln und es wird immer die richtige Metabox angezeigt.


Fazit

Postformate können sehr praktisch sein, um das Layout jeder Art von Post zu personalisieren. Die Anzeige von Metaboxen ist eine großartige Möglichkeit, die Benutzerfreundlichkeit zu verbessern.

Außerdem spart es Platz auf einem bereits überladenen Admin-Bildschirm. Mit etwas mehr CSS und mehreren Feldern können Sie die Art und Weise, wie Sie Beiträge schreiben, wirklich verbessern und eine wirklich intuitive Benutzeroberfläche erhalten.