Drie praktische toepassingen voor aangepaste metaboxen

Vorige week hebben we geïntroduceerd hoe we aangepaste metaboxen kunnen maken in de post-editor en de gegevens kunnen bewaren die je erin zet. Maar wat zijn enkele praktische toepassingen van deze techniek? Vandaag is het de bedoeling om drie voorbeelden uit de echte wereld te bespreken van het gebruik van aangepaste metaboxen om de berichtpagina te verbeteren.


In het introductieartikel hebt u alles geleerd over het implementeren van metaboxen en het opslaan / opschonen van de gegevens die erin worden geplaatst. Dat is geweldig! Maar het is tijd om verder te gaan dan de conceptuele informatie en die aangepaste metaboxen aan het werk te zetten.


Voorbeeld 1. Een citaat toevoegen aan de top van berichten

Het scenario: U voert een website uit die voornamelijk inspirerende inhoud publiceert. Een van de dingen die je consequent doet, is aanhalingstekens bovenaan elke post. Als u deze aanhalingstekens wilt scheiden van de inhoud, wilt u ze verplaatsen naar een aangepaste metabox.

In het artikel 'Hoe kan ik' hebben geleerd hoe je meta-dozen daadwerkelijk kunt implementeren, maar hier volgt een korte beoordeling.

1. Voeg de metabox toe

Haak een functie in de add_meta_boxes die een oproep bevat naar de add_meta_box functie.

 

2. Render de Meta Box

Maak een functie met dezelfde naam als de $ callback gespecificeerd in add_meta_box. Dit is het stuk dat daadwerkelijk metabox-inhoud weergeeft.

 ID, '_cd_quote_content', waar); $ author = get_post_meta ($ post-> ID, '_cd_quote_author', true); $ date = get_post_meta ($ post-> ID, '_cd_quote_date', true); // Nonce om de intentie later te verifiëren wp_nonce_field ('save_quote_meta', 'quote_nonce'); ?> 

3. Sla de gegevens op

Koppel een functie aan save_post die eerst omgaat met het verifiëren van rechten en intenties en dan opschoont en de gegevens opslaat.

  array ()); if (isset ($ _POST ['_ cd_quote_content'])) update_post_meta ($ id, '_cd_quote_content', wp_kses ($ _POST ['_ cd_quote_content'], $ allowed)); if (isset ($ _POST ['_ cd_quote_author'])) update_post_meta ($ id, '_cd_quote_author', esc_attr (strip_tags ($ _POST ['_ cd_quote_author']))); if (isset ($ _POST ['_ cd_quote_date'])) update_post_meta ($ id, '_cd_quote_date', esc_attr (strip_tags ($ _POST ['_ cd_quote_date']))); ?>

Nu het leuke gedeelte: de gegevens gebruiken

We zouden de gegevens die zijn opgeslagen in onze metaboxen kunnen gebruiken door de sjabloonbestanden van onze thema's te bewerken. Maar dat is te gemakkelijk. Om onze quote-code modulair te houden (één plugin-bestand), gebruiken we filterhaken, onderdeel van de Plugin-API. Filterhaken zijn iets anders dan acties. Wanneer u in een filter haakt, is het doel meestal om te wijzigen hoe een deel van de inhoud op een pagina wordt weergegeven. In ons geval gaan we inhaken de inhoud, en als we op een enkele berichtpagina staan ​​met een citaat, voegen we deze hierboven toe.

Een andere manier om actie versus filterhaken te bedenken is dat jij echo dingen uit in acties (bijv. wp_head, zie sectie 2), maar met filters die u in een of meerdere variabelen invoert, wijzigt u ze en vervolgens terugkeer hen.

Om onze quote weer te geven, houden we ons aan de inhoud, die standaard één variabele doorgeeft: de inhoud van een bepaalde post. In onze gekoppelde functie zorgen we ervoor dat we op één bericht zitten en, als dat niet het geval is, de inhoud op de juiste manier retourneren (geen wijzigingen).

 

Vervolgens krijgen we onze $ bericht variabel. Omdat we op de hoogte zijn, bellen we gewoon wereldwijde $ post. Dan zullen we onze prijsopgave ontvangen, als er geen waarde terugkomt, weten we dat er geen offerte is ingevoerd en we sturen de inhoud opnieuw zonder wijziging.

 ID, '_cd_quote_content', waar); // Borgtocht als we geen offerte hebben; als (leeg ($ quote)) $ inhoud retourneert; ?>

Nu we ervoor hebben gezorgd dat we op één bericht zitten en we een offerte hebben, zorgen we ervoor dat alles bij elkaar wordt gezet. Eerst bellen we onze auteur en haar datums via get_post_meta (), dan kunnen we beginnen met het bouwen van een string in de $ out variabel. Eerst voegen we een toe

en ons citaat. Vervolgens controleren we of het auteursveld is ingevuld. Als dit het geval was, starten we een alinea voor de auteur en controleren of er een datum was en voeg die ook toe aan de alinea. Ten slotte voegen we onze afsluiting toe
label.

 ID, '_cd_quote_content', waar); // Borgtocht als we geen offerte hebben; als (leeg ($ quote)) $ inhoud retourneert; // Verzamel ons citaat $ author = get_post_meta ($ post-> ID, '_cd_quote_author', true); $ date = get_post_meta ($ post-> ID, '_cd_quote_date', true); $ out = '
'. $ Citaat; if (! empty ($ author)) $ out. = '

-'. $ Auteur; if (! empty ($ date)) $ out. = '('. $ date. ')'; $ uit. = '

'; $ uit. = '
'; ?>

Nu de meest cruciale stap: terugkeren van de combinatie van onze nieuw gemaakte $ out string die de quote en de originele inhoud bevat $ inhoud.

 ID, '_cd_quote_content', waar); // Borgtocht als we geen offerte hebben; als (leeg ($ quote)) $ inhoud retourneert; // Verzamel ons citaat $ author = get_post_meta ($ post-> ID, '_cd_quote_author', true); $ date = get_post_meta ($ post-> ID, '_cd_quote_date', true); $ out = '
'. $ Citaat; if (! empty ($ author)) $ out. = '

-'. $ Auteur; if (! empty ($ date)) $ out. = '('. $ date. ')'; $ uit. = '

'; $ uit. = '
'; // Retourneer de waarden: citeer eerst, dan retourneert de inhoud $ out. $ Inhoud; ?>

Dat is het! Je kunt het resultaat zien.


Voorbeeld 2. Open grafiek-metatags toevoegen

Het scenario: Je hebt een actieve community van lezers die regelmatig je artikelen op Facebook delen. Dit is geweldig en het stuurt veel verkeer op jouw manier. Maar je begint te merken dat de afbeeldingen die verschijnen met je artikelen op Facebook, niet ideaal zijn. Je bent ook niet blij met hoe de titels van je berichten eruit komen te zien. De oplossing is om Open Graph-metatags toe te voegen om te bepalen hoe uw artikelen worden weergegeven. In plaats van dit automatisch te laten regelen, besluit u om een ​​aangepaste metabox te implementeren om ervoor te zorgen.

Stel de Meta Box in

Je hebt dit waarschijnlijk al lang niet, maar hier is de code voor het opstarten van je metabox.

 ID, '_cd_opengraph_title', waar); $ desc = get_post_meta ($ post-> ID, '_cd_opengraph_desc', true); $ image = get_post_meta ($ post-> ID, '_cd_opengraph_image', true); // Voeg een nonce veld toe wp_nonce_field ('save_opengraph_meta', 'opengraph_nonce'); ?> 



Kleine, vierkante afbeeldingen werken het beste.

Voeg wat JavaScript toe

Om die knop "Uploaden Afbeelding" te laten werken, moeten we een beetje JavaScript toevoegen dat de ingebouwde WordPress-uploader kaping geeft. Dit betekent dat we nog een andere actiehaak gaan gebruiken. Deze keer is het admin_print_script - $ page.

Bij het toevoegen van scripts en / of stijlen aan het admingebied van WordPress, is er één gouden regel: voeg alleen de scripts / stijlen toe waar u ze nodig hebt. Dit voorkomt dat uw plug-in / thema iets anders per ongeluk breekt. admin_print_scripts - $ page laat je alleen scripts invoegen (via de functie wp_enqueue_script) alleen op de $ pagina gespecificeerd. In dit geval moeten we ons script toevoegen aan de post.php en post-new.php -schermen. Hiervoor moet dezelfde functie in beide worden gehaakt.

 

En het javascript.

 jQuery (document) .ready (function () var ogfield = null; jQuery ('# cdog-thickbox') .click (function () ogfield = jQuery ('input # og-image') .attr ('naam' ); tb_show (", 'media-upload.php? type = image & TB_iframe = true'); return false;); window.send_to_editor_old = window.send_to_editor; window.send_to_editor = function (html) var ogimg; if (ogfield) ! = null) ogimg = jQuery ('img', html) .attr ('src'); jQuery ('input # og-image') .val (ogimg); tb_remove (); ogfield = null; else  window.send_to_editor_old (html);;);

Eerst zorgen we ervoor dat de thickbox-uploader verschijnt wanneer op de knop wordt geklikt, en we stellen een variabele in die WordPress vertelt dat op onze knop is geklikt. Vervolgens slaan we de window.send_to_editor functie met een nieuwe naam. Dit is de functie die de HTML van de afbeelding daadwerkelijk in het postbewerkingsgebied invoegt. We gaan deze functie kapen om het src-attribuut naar ons eigen formulierveld te sturen, maar alleen als de thickbox is opgevoed door onze knop.

Voeg de Open Graph-tags toe

We gaan in de wp_head actie om onze metatags toe te voegen in de sectie. Eerst zorgen we ervoor dat we op een enkele postpagina staan ​​en stellen we vervolgens onze $ bericht veranderlijk. $ bericht mag op dit moment niet leeg zijn, omdat WordPress al heeft besloten welk type object het rendert en welk sjabloonbestand het moet gebruiken. Maar in het geval dat dit het geval is, halen we de post op met get_queried_object ().

 get_queried_object (); ?>

Vervolgens kunnen we elke Open Graph-variabele doorlopen en alles ophalen met get_post_custom (), en, als het daar is, echo het uit in het hoofdgedeelte van onze pagina.

 get_queried_object (); $ values ​​= get_post_custom ($ post-> ID); if (isset ($ values ​​['_ cd_opengraph_title'])) echo ''. "\ n"; if (isset ($ values ​​['_ cd_opengraph_desc'])) echo ''. "\ N"; if (isset ($ values ​​['_ cd_opengraph_image'])) echo ''. "\ N"; ?>

Voorbeeld 3. Verander Twenty Elf Layouts on the Fly

Het scenario: Je vertrouwt sterk op de sidebar-paginasjabloon van Twenty Eleven. Maar u wilt voor elke pagina kunnen schakelen tussen de linker en rechter zijbalk.

De volgende code zou iets beters zijn in het functiedossier van een thema. Dat gezegd hebbende, omdat we hier een plug-in gebruiken, kunnen we inhaken op de in het en met onze functiecontrole om ervoor te zorgen dat Twenty Eleven het huidige thema is. Als dat niet het geval is, zullen we de plug-in deactiveren. Eerst zullen we echter een constante definiëren die de URL bevat van de directory waarin onze plug-in zich bevindt.

 

De metabox toevoegen

Dezelfde routine als voorheen: voeg de metabox toe, render deze en sla de gegevens op. Deze keer zullen we echter onze metabox weergeven op het bewerkingsscherm voor pagina's. We gaan ook een handige wordpress-functie gebruiken genaamd get_template_directory_uri, die een string retourneert die de URI van de directory voor het huidige thema bevat. We gaan dit gebruiken om een ​​paar afbeeldingen te lenen die Twenty Eleven gebruikt op de pagina met thema-opties. We gaan ook de constante gebruiken die we eerder hebben gedefinieerd om een ​​eigen afbeelding toe te voegen.

 ID, '_cd_post_layout', waar); // Stel onze lay-outvariabele in, zelfs op nieuwe berichten als (leeg ($ layout)) $ layout = 'default'; // Themamap voor het lenen van 2011-afbeeldingen $ dir = get_template_directory_uri (); wp_nonce_field ('save_post_layout', 'layout_nonce'); ?> 

Let op: dit werkt alleen als u "Sidebar-sjabloon" hebt geselecteerd in het gedeelte Paginakenmerken

/>
/>
/>

Om onze metabox een beetje mooier te maken, moeten we ook ons ​​eigen stylesheet toevoegen. Onthouden admin_print_scripts - $ page uit het tweede scenario hierboven? Het heeft een broer, admin_print_styles - $ page, wat, zoals de naam al aangeeft, het mogelijk maakt om stylesheets toe te voegen aan de wordpress admin op specifieke pagina's. We moeten deze functie gebruiken voor post.php en post-new.php. We gebruiken ook wp_enqueue_style (); het werkt hetzelfde als wp_enqueue_script (), dat we in het tweede voorbeeld hierboven hebben gebruikt.

 

En de CSS.

 div.cd-layout width: 200px; float: left;  div.cd-layout input display: block;  # cd-sidebar-pos .clearfix: after clear: both; inhoud: "; weergave: blok; tekengrootte: 0; regelhoogte: 0; zichtbaarheid: verborgen; breedte: 0; hoogte: 0; # cd-zijbalk-pos labelbereik weergave: blok; marge-boven: 5px;

Graven in Twenty Eleven

Twenty Eleven bereikt zijn zijbalkpositionering door in een genoemd filter te haken body_class. Dit maakt deel uit van de functie genaamd , welke, als je eerder een thema hebt ontworpen, je waarschijnlijk hebt gebruikt. Als de standaardlay-out twee kolommen is, voegt Twenty Eleven een van de twee extra items toe aan body_class: rechterzijbalk of linkerzijbalk. Je kunt de code hiervoor zien in de thema's inc map in het bestand theme-options.php.

Onze eigen code gaat ook inhaken body_class. Eerst zorgen we ervoor dat we op een pagina staan ​​en dat die pagina de pagina gebruikt Sidebar-sjabloon. Dan zullen we de $ bericht variabele of stel deze in als deze leeg is. Let op twee extra argumenten voor add_filter. 99 is de prioriteit. We willen dat dit als laatste vuurt, dus we gebruiken een hoger nummer. 1 is het aantal of de argumenten die naar onze functie moeten worden verzonden.

 

body_class zal een reeks van alle items verzenden die in de body_class () uitgangsfunctie. Van hieruit moeten we alleen onze eigen meta-waarden krijgen. Als onze waarde 'juist' is, zoeken we naar 'left-sidebar' in de bodyclass-array. Als het er is, schakelen we het uit en vervangen het door "rechterzijbalk". Andersom als onze waarde is overgebleven.

 ID, '_cd_post_layout', waar); // als we de juiste lay-out gebruiken, voeg dan toe ($ layout == 'right') $ key = array_search ('left-sidebar', $ classes); if ($ key) unset ($ classes [$ key]); $ classes [] = 'right-sidebar';  elseif ($ layout = 'left') $ key = array_search ('right-sidebar', $ classes); if ($ key) unset ($ classes [$ key]); $ classes [] = 'left-sidebar';  retourneer $ klassen; ?>

Het bovenstaande zou werken, maar we hebben een klein detail weggelaten. Als een gebruiker toevallig de thema-opties van Twenty Eleven had ingesteld op een weergave met één kolom, zou geen van de opties in onze metabox werken. Dus laten we het aanpassen add_meta_box bel een beetje. Eerst krijgen we de opties van Twenty Eleven, dan zorgen we ervoor dat de optie voor de thema-opmaak niet op één kolom staat. Als het thema is ingesteld op één kolom, voegen we de metabox niet toe.

 

Afronden

Zoals je je misschien kunt voorstellen, zijn er veel andere toepassingen voor aangepaste metaboxen? dit zijn maar een paar praktische voorbeelden om je geest aan het werk te krijgen. In combinatie met aangepaste berichttypen kunt u uiterst aangepaste bewerkingsschermen maken. De echte kracht van aangepaste metaboxen ligt echter in de manier waarop thema-ontwerpers en plugin-ontwikkelaars gebruiksvriendelijkere interfaces kunnen maken voor instellingen op post- of pagina-niveau.

We hopen dat je de tutorial leuk vond!