Folosind WordPress pentru a crea un sistem FAQ cu tipuri personalizate de posturi

Recent am lucrat cu un client de-al meu, care lucrează ca consultant profesionist în aria sa de lucru. Ea a întrebat dacă pot implementa un sistem Q & A sau o pagină de întrebări frecvente. I-am spus: "Sigur, putem să creăm o pagină și să lipim întrebările și răspunsurile acolo cu stil diferit", dar ea a spus că va crea pagini diferite și va clasifica întrebările și răspunsurile, și pentru a fi mai organizată, avea nevoie de o abordare diferită.

În acest scop, vă voi arăta cum am tratat solicitările ei cu câteva linii simple de cod folosind tipuri personalizate de posturi, taxonomii și coduri scurte.

Tipul de post particularizat și taxonomia

Ce avem nevoie pentru a construi un sistem de întrebări frecvente? 

  • Avem nevoie de câmpuri pentru întrebări și răspunsuri.
  • Avem nevoie de categorii pentru a clasifica și a separa diferite tipuri de întrebări și răspunsurile lor.
  • În cazul nostru, avem nevoie de un scurtcod pentru a încorpora aceste grupuri de întrebări sau toate întrebările dintr-o pagină sau dintr-o postare.

Să începem prin crearea tipului de post personalizat.

Pasul 1: Crearea tipului de post particularizat

Bineînțeles, vom începe să creăm un tip de post personalizat pentru elementele noastre de întrebări frecvente. Vom crea un nou tip de post personalizat cu ajutorul funcției register_post_type () dar dacă doriți un GUI pentru crearea tipului dvs. de postare, îl puteți genera cu instrumentul generatorului de tip GenerateWP, așa cum am făcut în acest exemplu:

 _x ('Întrebări frecvente', 'Tip de post general', 'tuts_faq'), 'singular_name' => _x ',' tutu_faq '),' view_item '=> __ (' Parent Item ',' tuts_faq '),' all_items ' "Add_new" => __ ("Adăugați noi", "tuts_faq"), "edit_item" => __ ("Articol de căutare", "tuts_faq"), "update_item" => __ ("Articol actualizat", "tuts_faq" > __ ("Nu a fost găsit", "tuts_faq"), "not_found_in_trash" => __ ("Nu este găsit în coșul de gunoi", "tuts_faq");); $ args = array (// utilizați etichetele de mai sus 'etichete' => etichete $, // vom avea nevoie doar de titlul, editorul Visual și câmpurile extras pentru tipul nostru de post "suport" => , "editor", "excerpt"), // vom crea această taxonomie în următoarea secțiune, dar trebuie să conectăm tipul nostru de post la acesta acum 'taxonomies' => array ('tuts_faq_tax' / a face public, pentru a putea fi văzut în panoul de administrare și să-l afișăm în front-end 'public' => true, // să afișeze elementul de meniu de sub elementul Pages 'menu_position' => 20, // show archives, dacă nu aveți nevoie de codul scurt 'has_archive' => true,); register_post_type ('tuts_faq', $ args);  // introduceți în acțiunea 'init' add_action ('init', 'tuts_faq_cpt', 0); ?>

Bacsis: Dacă proiectul dvs. va implica mai multe tipuri de posturi personalizate, care pot fi mai complexe decât acest tip de post simplu, vă pot sugera un instrument răcoros numit SuperCPT, care vă permite să creați noi tipuri de posturi cu un cod chiar mai simplu. Am scris un tutorial despre SuperCPT, de asemenea, puteți verifica aici.

Pasul 2: Crearea taxonomiei personalizate

Pentru a separa diferite tipuri de întrebări (cum ar fi întrebările clientului meu și răspunsurile despre avortul spontan și depresia postpartum), vom avea nevoie de un sistem de categorii. După cum mulți dintre voi știți deja, WordPress oferă această funcție cu taxonomii personalizate.

Funcția esențială aici este register_taxonomy () dar din nou, puteți utiliza instrumentul generatorului de taxonomii GenerateWP dacă aveți nevoie de o interfață grafică. 

Iată codul:

 _x ('Categorii de întrebări frecvente', 'Taxonomy General Name', 'tuts_faq'), 'singular_name' => Categorii ',' tuts_faq '),' all_items '=> __ (' Toate pisicile frecvente ',' tuts_faq '),' parent_item '=> __ ('FAQ New Cat', 'tuts_faq'), 'add_new_item' => __ ('Adăugați noi întrebări Cat', 'tuts_faq' 'edit_item' => __ ('Modificați întrebările de tip cat', 'tuts_faq'), 'update_item' => 'tuts_faq '),' search_items '=> __ (' Căutați elemente ',' tuts_faq '),' add_or_remove_items '=> din cele mai utilizate elemente, "tuts_faq"), "not_found" => __ ("Nu a fost găsit", "tuts_faq")); $ args = array (// utilizați etichetele de mai sus 'etichete' => etichete $, // taxonomia ar trebui să fie ierarhică, astfel încât să o putem afișa ca o secțiune de categorie 'ierarhică' => true, // din nou, ca tipul postului) 'public' => true,); // conținutul matricei de mai jos specifică tipurile de posturi care ar trebui să fie legate de taxonomie cu register_taxonomy ('tuts_faq_tax', array ('tuts_faq'), $ args);  // introduceți în acțiunea 'init' add_action ('init', 'tuts_faq_tax', 0); ?>

Asta e! Acum aveți un tip de postare cu întrebări frecvente, cu o taxonomie numită "Categorii de întrebări frecvente" legate între ele! Verificați panoul de administrare și veți vedea elementul de meniu "Categorii de întrebări frecvente" din secțiunea "Întrebări frecvente". 

La fel ca și categoriile de posturi regulate, le puteți adăuga, modifica sau elimina în pagina "Categorii de întrebări frecvente" sau puteți adăuga noi categorii în timp ce scrieți un nou articol de întâlniri frecvente.

Pasul 3: Crearea [FAQ] Cod scurt

Aici vine partea distractivă: construirea codului scurt. (Dacă ați citit postările mele anterioare, știi că sunt imens fan de coduri scurte WordPress.) În principiu, vom face ca articolele FAQ să fie încorporate în postări și pagini. 

Iată ce se va întâmpla:

  • interogați în interiorul noului tip de post personalizat,
  • filtrați categoriile sale cu un parametru de cod scurt,
  • afișați întrebările și răspunsurile ca titluri și conținut,
  • arătați un fragment al răspunsului cu o legătură "Mai mult ...", controlată de un alt parametru de cod scurt.

Să începem să construim codul scurt. Ca și codul de mai sus, voi include câteva comentarii utile:

", // atributul complet sau extras - implicit la conținutul integral 'excerpt' => 'false',), $ atts)); $ output ="; // setați argumentele interogării $ query_args = array (// arătați toate postările care se potrivesc cu această interogare 'posts_per_page' => -1, // arătați tipul postului personalizat 'tuts_faq' post_type '=>' tuts_faq ', // posturi care corespund limbajului din categoria de întrebări frecvente specificate cu atributul "tax_query" al codului de scurtă durată => array (array ('taxonomy' => 'tuts_faq_tax', 'field' => 'slug', 'terms' => , // spuneți WordPress că nu are nevoie să numere rândurile totale - acest mic truc reduce încărcarea bazei de date dacă nu aveți nevoie de paginare 'no_found_rows' => true,); // primi mesajele cu argumentele interogării $ faq_posts = get_posts ($ query_args); $ output = '
„; // manipulați foreach-ul nostru cu buclă personalizată ($ faq_posts as $ post) setup_postdata ($ post); $ faq_item_title = get_the_title ($ post-> ID); $ faq_item_permalink = get_permalink ($ post-> ID); $ faq_item_content = get_the_content (); dacă ($ excerpt == 'true') $ faq_item_content = get_the_excerpt (). ''. __ ("Mai mult ...", "tuts_faq"). ''; $ output = '
„; $ output = '

". $ faq_item_title. '

„; $ output = '
". $ faq_item_content. '
„; $ output = '
„; wp_reset_postdata (); $ output = '
„; returnați outputul $; add_shortcode ('faq', 'tuts_faq_shortcode'); ?>

Asta e! Acum avem un scurt cod scurt pentru a ne încorpora întrebările și răspunsurile. Puteți să-l stil cu numele de clasă Tuts-faq, Tuts-faq-item, Tuts-faq-item-titlu, și Tuts-faq-item-content. Deși ar trebui să fie bine chiar dacă nu includeți stilul suplimentar.

Pasul 4: Înfășurarea codului

Din moment ce acești biți de cod nu se referă doar la styling-ul front-end-ului, dar și la introducerea unor noi funcționalități, acesta este considerat ca fiind un plugin. De aceea trebuie să salvăm codul ca plugin. Și în timp ce ne aflăm la el, ar trebui să eliminăm și regulile de rescriere după activare și dezactivare.

Iată codul complet:

[FAQ] Versiune: 1.0 Autor: Barıș Ünver Autor URI: http://hub.tutsplus.com/authors/baris-unver Licență: Domeniul public * / if (! Function_exists ('tuts_faq_cpt')) // înregistrarea personalizată tip post post tuts_faq_cpt () // acestea sunt etichetele din interfața de administrare, le editați așa cum vă place $ labels = array ('name' => _x ('FAQs', 'Post Type General Name', 'tuts_faq' => _x ('Întrebări frecvente', 'tuts_faq'), 'parent_item_colon' => __ ("Element părinte:", tuts_faq '),' all_items '=> __ (' Toate articolele ',' tuts_faq '),' view_item '=> ',' add_new '=> __ (' Adăugare nouă ',' tuts_faq '),' edit_item '=> , "Not_found" => __ ("Nu a fost găsit", "tuts_faq"), Nu se găsește în coșul de gunoi "," tuts_faq ");); $ args = array (// utilizați etichetele de mai sus 'etichete' => etichete $, // vom avea nevoie doar de titlul, editorul Visual și câmpurile extras pentru tipul nostru de post "suport" => , "editor", "excerpt"), // vom crea această taxonomie în următoarea secțiune, dar trebuie să conectăm tipul nostru de post la acesta acum 'taxonomies' => array ('tuts_faq_tax' / a face public, pentru a putea fi văzut în panoul de administrare și să-l afișăm în front-end 'public' => true, // să afișeze elementul de meniu de sub elementul Pages 'menu_position' => 20, // show archives, dacă nu aveți nevoie de codul scurt 'has_archive' => true,); register_post_type ('tuts_faq', $ args);  // introduceți în acțiunea 'init' add_action ('init', 'tuts_faq_cpt', 0);  dacă (! function_exists ('tuts_faq_tax')) // înregistra funcția taxonomie personalizată tuts_faq_tax () // din nou, etichete pentru panoul de administrare $ labels = array ('name' => _x ("Categorii de întrebări frecvente", "tuts_faq"), "singular_name" => _x all_items '=> __ (' Întrebări frecvente pentru părinți ',' tuts_faq '),' parent_item '=> "add_new_item" => __ ('Adăugați o nouă întrebare Cat', 'tuts_faq'), 'edit_item' => __ ('Edit Întrebări frecvente Cat ',' tuts_faq '),' update_item '=> __ (' Update FAQ Cat ',' tuts_faq '),' separate_items_with_commas '=> > __ ("Elemente de căutare", "tuts_faq"), "add_or_remove_items" => __ ("Adăugați sau eliminați articole", "tuts_faq"), "choose_from_most_used" => '),' not_found '=> __ (' Nu a fost găsit ',' tuts_faq '),); $ args = array (// utilizați etichetele de mai sus 'etichete' => etichete $, // taxonomia ar trebui să fie ierarhică, astfel încât să o putem afișa ca o secțiune de categorie 'ierarhică' => true, // din nou, ca tipul postului) 'public' => true,); // conținutul matricei de mai jos specifică tipurile de posturi care ar trebui să fie legate de taxonomie cu register_taxonomy ('tuts_faq_tax', array ('tuts_faq'), $ args);  // introduceți în acțiunea 'init' add_action ('init', 'tuts_faq_tax', 0);  if function_exists ('tuts_faq_shortcode')) functie tuts_faq_shortcode ($ atts) extract (shortcode_atts (array (// categoria atribut slug - default la categoria '=> la întregul conținut 'excerpt' => 'false',), $ atts)); $ output = "; // setați argumentele interogării $ query_args = array (// arătați toate postările care se potrivesc cu această interogare 'posts_per_page' => -1, // arătați tipul postului personalizat 'tuts_faq' post_type '=>' tuts_faq ', // posturi care corespund limbajului din categoria de întrebări frecvente specificate cu atributul "tax_query" al codului de scurtă durată => array (array ('taxonomy' => 'tuts_faq_tax', 'field' => 'slug', 'terms' => , // spuneți WordPress că nu are nevoie să numere rândurile totale - acest mic truc reduce încărcarea bazei de date dacă nu aveți nevoie de paginare 'no_found_rows' => true,); // primi mesajele cu argumentele interogării $ faq_posts = get_posts ($ query_args); $ output = '
„; // manipulați foreach-ul nostru cu buclă personalizată ($ faq_posts as $ post) setup_postdata ($ post); $ faq_item_title = get_the_title ($ post-> ID); $ faq_item_permalink = get_permalink ($ post-> ID); $ faq_item_content = get_the_content (); dacă ($ excerpt == 'true') $ faq_item_content = get_the_excerpt (). ''. __ ("Mai mult ...", "tuts_faq"). ''; $ output = '
„; $ output = '

". $ faq_item_title. '

„; $ output = '
". $ faq_item_content. '
„; $ output = '
„; wp_reset_postdata (); $ output = '
„; returnați outputul $; add_shortcode ('faq', 'tuts_faq_shortcode'); funcția tuts_faq_activate () tuts_faq_cpt (); flush_rewrite_rules (); register_activation_hook (__FILE__, 'tuts_faq_activate'); funcția tuts_faq_deactivate () flush_rewrite_rules (); register_deactivation_hook (__FILE__, 'tuts_faq_deactivate'); ?>

Loc pentru imbunatatiri

Clientul meu a fost mulțumit de rezultate când i-am arătat cum să o folosească. Dar aici, putem extinde codul cu mai multă funcționalitate, cum ar fi ...

  1. Efectul acordeonului: Dacă doriți să faceți ca secțiunile de întrebări frecvente să fie mai atractive cu unele efecte de comutare, puteți folosi câteva pluginuri jQuery extraordinare. Dacă doriți să utilizați jQuery UI, există un tutorial uimitor de Shane Osbourne, care arată cum se face.
  2. Paginare: Dacă aveți o mulțime de întrebări și răspunsuri pentru o categorie și nu doriți să afișați simultan toate elementele, puteți limita numărul de postări schimbând posts_per_page parametru în interogarea personalizată a codului nostru scurt și adăugați codul necesar pentru linkurile de paginare de sub linia cu wp_reset_postdata (); cod. Nu uitați să eliminați 'no_found_rows' => true, line, deși - paginarea nu va funcționa dacă nu eliminați acest lucru!
  3. Întrebare aleatorie: Să presupunem că doriți să afișați o întrebare aleatorie pe pagina principală și doriți să schimbați fiecare reîmprospătare a paginii. Tot ce trebuie să faceți este să vă îndreptați către interogarea personalizată, schimbați-o posts_per_page parametru de la -1 la 1 și adăugați o altă linie cu codul 'orderby' => 'aleator', și ești bine să pleci!

Concluzie

Acesta este modul în care construiți un sistem simplu de întrebări frecvente în WordPress prin utilizarea tipurilor personalizate de posturi, taxonomii personalizate și coduri scurte. Sper că vă bucurați de acest tutorial și îl puteți utiliza în următorul proiect. Nu uitați să distribuiți articolul, dacă vă place!

Aveți idei pentru a îmbunătăți acest sistem de întrebări frecvente? Trimiteți comentariile dvs. mai jos!

Cod