Op veel van de client-sites die ik heb gebouwd, zie ik dat er tijden zijn dat ik een postvermelding op een pagina moet opnemen. Ik heb het hier niet over archiefpagina's, maar een aangepaste lijst aan een bestaande statische pagina toevoegen.
Ik wil bijvoorbeeld een aantal berichten posten op de 'Over' pagina, of de site kan een diepgaande pagina voor een onderwerp vereisen, met een lijst met berichten en aangepaste berichttypen met betrekking tot dat onderwerp.
Een manier om dit te doen, is door een aangepast paginasjabloon te maken om de huidige pagina-inhoud plus de resultaten van een tweede aangepaste query op te nemen, maar als u meer flexibiliteit wilt over hoe u berichten plaatst of het een paar keer wilt doen, shortcode zal een eenvoudigere oplossing zijn.
In deze zelfstudie laat ik je zien hoe je een eenvoudige shortcode kunt maken om alle berichten van een aangepast berichttype te vermelden, en daarna zal ik dat uitbreiden om een shortcode te maken met verschillende parameters die gebruikers kunnen opgeven om berichten te posten, maar ze willen.
U heeft de volgende bronnen nodig:
U vindt alle code om deze plug-in te maken in de codedownload.
Voordat u de shortcode instelt, moet u een aangepast berichttype en twee aangepaste taxonomieën registreren, die we zullen gebruiken om de shortcode te testen.
De code om dit te doen is opgenomen in de plug-in die ik heb geschreven voor de shortcode, hoewel ik in een live-project zou aanbevelen dit te scheiden van de shortcode-plug-in zelf.
Maak een nieuw bestand in uw map met plug-ins en noem het post-lijst-shortcode.php.
Voeg de onderstaande code toe aan het bestand.
Notitie: Het maken van de aangepaste berichttypen en taxonomieën staat niet centraal in het leren van deze zelfstudie. Als je wilt, kun je deze code uit het downloadbestand kopiëren en deze fase overslaan.
'Kleding', 'singular_name' => 'Kledingitem', 'add_new' => 'Nieuw toevoegen', 'add_new_item' => 'Nieuw kledingitem toevoegen', 'edit_item' => 'Bewerk kledingitem', 'nieuw_item' => 'New Clothing Item', 'all_items' => 'All Clothes', 'view_item' => 'View Clothing Item', 'search_items' => 'Search Clothes', 'not_found' => 'Geen kleren gevonden', 'not_found_in_trash' => 'Geen kleding gevonden in Trash', 'parent_item_colon' => ", 'menu_name' => 'Clothes',); register_post_type ('clothes', array ('labels' => $ labels, 'has_archive' => true, 'public' => true, 'hierarchical' => true, 'supports' => array ('title', 'editor', 'excerpt', 'custom-fields', 'thumbnail', 'page- attributen '),' taxonomieën '=> array (' post_tag ',' categorie '),' exclude_from_search '=> true,' capability_type '=>' post ',)); // registreer twee taxonomieën die bij de post passen type add_action ('init', 'rmcc_create_taxonomies', 0); function rmcc_create_taxonomies () // kleurtaxonomie $ labels = array ('name' => _x ('Colors', 'taxonomy general name'), 'si ngular_name '=> _x (' Color ',' taxonomy singular name '),' search_items '=> __ (' Zoekkleuren '),' all_items '=> __ (' Alle kleuren '),' parent_item '=> __ ( 'Hoofdkleur'), 'parent_item_colon' => __ ('Hoofdkleur:'), 'edit_item' => __ ('Kleur bewerken'), 'update_item' => __ ('Kleur bijwerken'), 'add_new_item' = > __ ('Nieuwe kleur toevoegen'), 'nieuwe_itemnaam' => __ ('Nieuwe kleur'), 'menu_name' => __ ('Kleuren'),); register_taxonomy ('color', 'clothes', array ('hierarchical' => true, 'labels' => $ labels, 'query_var' => true, 'rewrite' => true, 'show_admin_column' => true)); // fabric taxonomy $ labels = array ('name' => _x ('Fabrics', 'taxonomy general name'), 'singular_name' => _x ('Fabric', 'taxonomy singular name'), 'search_items' => __ ('Search Fabrics'), 'all_items' => __ ('All Fabric'), 'parent_item' => __ ('Parent Fabric'), 'parent_item_colon' => __ ('Parent Fabric:'), 'edit_item '=> __ (' Edit Fabric '),' update_item '=> __ (' Update Fabric '),' add_new_item '=> __ (' Nieuwe stof toevoegen '),' new_item_name '=> __ (' Nieuwe stof ') , 'menu_name' => __ ('Fabrics'),); register_taxonomy ('fabric', 'clothes', array ('hierarchical' => true, 'labels' => $ labels, 'query_var' => true, 'rewrite' => true, 'show_admin_column' => true)); ?>
Dit vertelt WordPress over de plug-in en registreert het aangepaste berichttype 'kleding' en de twee taxonomieën, 'kleur' en 'stof'.
Sla deze plug-in op en activeer deze via de plug-inpagina in WordPress.
Nu hebt u uw aangepaste berichttype en taxonomieën op hun plek, maak een aantal berichten met behulp van hen. In de onderstaande schermafbeelding ziet u de inhoud die ik heb gemaakt:
Als u alleen inhoud op één manier wilt weergeven met uw shortcode, kunt u een zeer eenvoudige shortcode maken die geen parameters gebruikt.
Open uw plugin-bestand opnieuw en voeg het volgende toe:
// maak een shortcode om alle kleding in de blauwe map add_shortcode weer te geven ('list-posts-basic', 'rmcc_post_listing_shortcode1'); function rmcc_post_listing_shortcode1 ($ atts) ob_start (); $ query = new WP_Query (array ('post_type' => 'clothes', 'color' => 'blue', 'posts_per_page' => -1, 'order' => 'ASC', 'orderby' => 'titel ',)); if ($ query-> have_posts ()) ?>
Dit maakt een eenvoudige shortcode, gebruik makend van WP_Query
om een aangepaste query op uw inhoud uit te voeren en de resultaten in een lijst af te drukken. Wanneer ik typ [List-berichten-basic]
naar een pagina zijn de resultaten zoals weergegeven in deze schermafbeelding:
De shortcode zal veel nuttiger zijn als gebruikers hun eigen parameters kunnen toevoegen, bijvoorbeeld door:
Om dit aan de shortcode toe te voegen, maakt u gebruik van de shortcode_atts ()
functie, waarmee u een aantal standaardattributen kunt opgeven die gebruikers kunnen negeren.
Nogmaals in uw plugin-bestand en onder de code voor de eerste shortcode voegt u het volgende toe:
// maak shortcode met parameters zodat de gebruiker kan definiëren wat wordt opgevraagd - standaard is het een lijst van alle blogberichten add_shortcode ('list-posts', 'rmcc_post_listing_parameters_shortcode'); function rmcc_post_listing_parameters_shortcode ($ atts) ob_start (); // definieer attributen en hun standaardinstellingen extract (shortcode_atts (array) ('type' => 'post', 'order' => 'datum', 'orderby' => 'titel', 'berichten' => -1, 'kleur '=> ",' fabric '=>",' categorie '=> ",), $ atts)); // definieer queryparameters op basis van attributen $ options = array (' post_type '=> $ type,' bestel ' => $ order, 'orderby' => $ orderby, 'posts_per_page' => $ posts, 'color' => $ color, 'fabric' => $ fabric, 'category_name' => $ category,); $ query = nieuwe WP_Query ($ opties); // voer de lus uit op basis van de vraag of ($ query-> have_posts ()) ?>
Notitie: Gebruik makend van ob_start ()
en ob_get_clean ()
zorgt ervoor dat de lus wordt uitgevoerd op de plaats op uw pagina of dat u de shortcode hebt toegevoegd. Als u deze niet toevoegt, wordt de lijst boven aan de inhoud weergegeven.
Standaard worden alle berichten in aflopende volgorde van datum weergegeven, dus als u typt [List-berichten]
naar een pagina of post, het resultaat is als in deze schermafbeelding:
Als u parameters toevoegt, worden dingen echter interessanter. Om bijvoorbeeld alle kleding met de kleur zwart weer te geven, typ ik [list-posts type = "clothes" color = "black" orderby = "name" order = "ASC"]
:
Of om alle kleding weer te geven in de categorie 'smart' die ik typ [list-posts type = "clothes" category = "smart" orderby = "name" order = "ASC"]
:
Als u wilt, kunt u meer kenmerken opgeven waarmee gebruikers kunnen werken, maar u moet alle beschikbare kenmerken opnemen in uw plug-in, in de extract (shortcode_atts))
functie.
U hoeft niet voor al deze standaardinstellingen op te geven - ik heb bijvoorbeeld de categorie- en taxonomieparameters leeg gelaten in het voorbeeld. De parameters die u kunt definiëren, zijn die waarvoor u kunt opgeven WP_Query
- voor een volledige lijst, zie de Codex-pagina.
Het kunnen gebruiken van een postvermelding in een pagina of post kan erg handig zijn. Het bespaart u dat u uw sjabloonbestanden moet wijzigen of een aangepaste paginasjabloon moet schrijven.
De shortcode die je hebt geleerd in deze plug-in, kan op veel manieren worden gebruikt, en je kunt natuurlijk eenvoudig wijzigen wat wordt uitgevoerd door de shortcode - mijn voorbeeld voert een lijst met opsommingstekens uit met berichttitels die zijn ingesloten in een link naar hun pagina, maar u kunt de code in de lus vervangen door de sjabloontags om de inhoud, uitgelichte afbeeldingen of iets anders weer te geven.
Enkele nuttige bronnen over de onderwerpen die hierboven zijn behandeld: