Opprett en kortkode til listeposter med flere parametere

På mange av klientene jeg bygger, finner jeg at det er tider når jeg må inkludere en postoppføring på en side. Jeg snakker ikke om arkivsidene her, men legger til en egendefinert oppføring på en eksisterende statisk side.

For eksempel vil jeg kanskje vise noen innlegg på siden Om, eller nettstedet kan kreve en grundig side for et emne, med en liste over innlegg og egendefinerte innleggstyper relatert til det aktuelle emnet.

En måte å gjøre dette på er å opprette en tilpasset sidemal for å inkludere det nåværende sidenes innhold pluss resultatet av et andre tilpasset søk, men hvis du vil ha mer fleksibilitet over hvordan du legger inn innlegg, eller bare vil gjøre det noen ganger, shortcode vil være en enklere løsning.

I denne veiledningen vil jeg vise deg hvordan du lager en enkel kortkode for å liste alle innlegg i en egendefinert innleggstype, og deretter vil jeg utvide på det for å lage en kortkode med ulike parametere som brukere kan spesifisere for å legge inn innlegg, men de vil ha.


Hva du trenger for å fullføre denne opplæringen

Du trenger følgende ressurser:

  • En utviklingsinstallasjon av WordPress
  • Tilgang til plugin-mappen din slik at du kan opprette og laste opp shortcode-plugin

Du finner all koden for å lage dette pluginet i kodedownloaden.


Komme i gang: Opprette innholdet

Før du oppretter kortnummeret, må du registrere en egendefinert innleggstype og to egendefinerte taksonomier, som vi skal bruke for å teste kortnummeret.

Koden for å gjøre dette finnes i pluginet jeg har skrevet for kortnummeret, men på et live-prosjekt vil jeg anbefale å skille dette ut fra shortcode-pluginet selv.

Opprett en ny fil i plugin-mappen din og ring den post-liste-shortcode.php.

Legg til koden under til filen.

Merk: Å skape egendefinerte innleggstyper og taksonomier er ikke sentralt for læringen fra denne opplæringen. Hvis du vil, kan du kopiere denne koden fra nedlastingsfilen og hoppe over dette stadiet.

  'Add_new' => 'Add_new_item' => 'Legg til nytt klærelement', 'edit_item' => 'Rediger klærelement', 'new_item' => 'New Clothing Item', 'all_items' => 'Alle klær', 'view_item' => 'Se klærelement', 'search_items' => 'Søk klær', 'not_found' => 'Ingen klær funnet', 'not_found_in_trash' => 'Ingen klær funnet i søppel', 'parent_item_colon' => ", 'menu_name' => 'Klær'); register_post_type ('klær', array ('labels' => $ etiketter, 'has_archive' => sant, 'public' => sant, 'hierarkisk' => sant, 'støtter' => array ('tittel', 'redigerer', 'utdrag', 'tilpassede felt', 'miniatyrbilde' attributter '),' taxonomies '=> array (' post_tag ',' kategori '),' exclude_from_search '=> true,' capability_type '=>' innlegg ')); // registrere to taksonomier for å gå med innlegget skriv inn add_action ('init', 'rmcc_create_taxonomies', 0); funksjonen rmcc_create_taxonomies () // fargetakonomi $ labels = array ('name' => _x ('Colors', 'taxonomy generell navn'), 'si ngular_name '=> _x (' Color ',' Taxonomy singular name '),' search_items '=> __ (' Søkfarger '),' all_items '=> __ (' Alle farger '),' parent_item '=> __ 'Parent Color'), 'parent_item_colon' => __ ('Parent Color:'), 'edit_item' => __ ('Rediger farge'), 'update_item' => __ ('Oppdater farge'), 'add_new_item' = > __ ('Legg til ny farge'), 'new_item_name' => __ ('Ny farge'), 'menu_name' => __ ('Farger');); register_taxonomy ('farge', 'klær', array ('hierarkisk' => true, 'labels' => $ etiketter, 'query_var' => true, 'rewrite' => true, 'show_admin_column' => true)); // stofftaksonomi $ etiketter = array ('name' => _x ('Fabrics', 'taxonomy generell navn'), '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 '=> __ (' Rediger stoff '),' update_item '=> __ (' Oppdater stoff '),' add_new_item '=> __ (' Legg til nytt stoff '),' new_item_name '=> __ (' New Fabric ') , 'menu_name' => __ ('Stoffer'),); register_taxonomy ('stoff', 'klær', array ('hierarchical' => true, 'labels' => $ etiketter, 'query_var' => true, 'rewrite' => true, 'show_admin_column' => true)); ?>

Dette forteller WordPress om plugin og registrerer egendefinert innleggstype 'klær' og de to taksonomiene, 'farge' og 'stoff'.

Lagre dette pluginet og aktiver det via Plugins-siden i WordPress.

Nå har du din egendefinerte innleggstype og taksonomi på plass, opprett noen innlegg ved hjelp av dem. I skjermbildet nedenfor kan du se innholdet jeg har laget:


Opprette en enkel oppføringskode

Hvis du bare vil liste innhold på en måte med kortnummeret ditt, kan du opprette en veldig enkel kortkode som ikke bruker parametere.

Åpne pluginfilen din igjen og legg til følgende:

 // lage shortcode for å liste alle klær som kommer i blå add_shortcode ('list-posts-basic', 'rmcc_post_listing_shortcode1'); funksjon rmcc_post_listing_shortcode1 ($ atts) ob_start (); $ query = new WP_Query (array ('post_type' => 'klær', 'color' => 'blue', 'posts_per_page' => -1, 'order' => 'ASC', 'orderby' => 'tittel ',)); hvis ($ query-> have_posts ()) ?> 
    have_posts ()): $ query-> the_post (); ?>
  • > ">

Dette skaper en enkel kortkode, ved hjelp av WP_Query å kjøre en egendefinert spørring på innholdet ditt og utdatere resultatene i en liste. Når jeg skriver inn [list-innlegg-basic] inn i en side er resultatene som vist på dette skjermbildet:


Legge til noen parametere for å endre spørringen

Kortnummeret vil være mye mer nyttig hvis brukerne kan legge til egne parametere, for eksempel velge:

  • Hvor mange innlegg å liste
  • Hvilken posttype du vil spørre
  • Kategorier å inkludere
  • Stoffer og farger å inkludere
  • Bestilling parametere

For å legge til dette i kortnummeret, bruker du shortcode_atts () funksjon, som lar deg spesifisere noen standardattributter som brukere kan overstyre.

Nok en gang i din pluginfil og under koden for den første koden, legger du til følgende:

 // lage shortcode med parametere slik at brukeren kan definere hva som blir forespurt - standard er å liste alle blogginnlegg add_shortcode ('list-posts', 'rmcc_post_listing_parameters_shortcode'); funksjon rmcc_post_listing_parameters_shortcode ($ atts) ob_start (); // definere attributter og standardverdien ekstrakt (shortcode_atts (array ('type' => 'post', 'order' => 'date', 'orderby' => 'title', 'posts' => -1 ' '=> ",' stoff '=>",' kategori '=> ",), $ atts); // definere søkeparametere basert på attributter $ options = array (' post_type '=> $ type,' rekkefølge ' = $ $ order, 'orderby' => $ orderby, 'posts_per_page' => $ innlegg, 'color' => $ color, 'fabric' => $ stoff, 'category_name' => $ kategori,); $ query = ny WP_Query ($ options); // kjør kretsen basert på spørringen hvis ($ query-> have_posts ()) ?> 
    • >

Merk: Ved hjelp av ob_start () og ob_get_clean () sikrer at sløyfen blir utført på stedet på siden din eller legger til at du har lagt til kortnummeret. Hvis du ikke legger til disse, vises listen øverst på innholdet.

Som standard listes alle innlegg i synkende rekkefølge, så hvis du skriver inn [list-meldinger] inn i en side eller post, er resultatet som i dette skjermbildet:

Men hvis du legger til noen parametere, blir ting mer interessant. For eksempel, for å liste alle klær som kommer i fargen svart, skriver jeg [liste-innlegg type = "klær" color = "black" orderby = "name" order = "ASC"]:

Eller å liste alle klær i kategorien "smart" jeg skriver inn [liste-innlegg type = "klær" category = "smart" orderby = "name" order = "ASC"]:

Hvis du trenger, kan du angi flere attributter som brukere kan jobbe med, men du må inkludere alle tilgjengelige i plugin-modulen, i ekstrakt (shortcode_atts)) funksjon.

Du trenger ikke å angi en standard for alle dem - for eksempel har jeg forlatt kategori- og taksonomiparametrene tomme i eksempelet. Parametrene du kan definere er noen av de som kan spesifiseres for WP_Query - For en fullstendig liste, se sin Codex-side.


Sammendrag

Å kunne sette inn en postoppføring i en side eller post kan være svært nyttig. Det sparer at du må endre malfiler eller skrive en egendefinert sidemal.

Kortnummeret du har lært å lage i dette pluginet kan brukes på mange måter, og selvfølgelig kan du enkelt endre hva som er utført med kortnummeret. Eksemplet mitt gir en punktliste med posttitler som er vedlagt en kobling til siden, men Du kan erstatte koden inne i sløyfen med maltekoder for å vise innholdet, de utvalgte bildene eller noe annet.


ressurser

Noen nyttige ressurser på temaene som er nevnt ovenfor:

  • Shortcode API
  • Shortcode attributter
  • WP_Query Parametre