Crearea unui plugin pentru tabelul de prețuri responsabile pentru WordPress

Tabelele de prețuri reprezintă o componentă cheie a afacerii dvs. care vă promovează produsele și îi ajută pe utilizatori să aleagă între diferitele servicii pe care le aveți. Majoritatea temelor WordPress comerciale moderne oferă o construcție în tabelele de prețuri. Există, de asemenea, o mulțime de pluginuri gratuite și de tabel de prețuri comerciale pentru WordPress. Acest tutorial este destinat să ofere cunoștințe dezvoltatorilor WordPress cu privire la crearea unui plugin de la zero, care permite personalizarea în diferite proiecte.

Fiecare design web încearcă să realizeze caracteristici sensibile care să permită un aspect mai bun pe orice tip de dispozitiv. Tabelele de tarifare create cu acest plugin vor funcționa pe toate tipurile de dispozitive, cum ar fi telefoanele mobile și tabletele. Deci sa începem.


Puteți să aruncați o privire la proiectul final al tabelului de prețuri de pe ecranul următor.


Planificarea pluginului pentru tabelul de prețuri

Planificarea este partea dificilă în orice proiect. Este mai bine să planificați modul în care vom elabora tabelul de prețuri și tehnicile pe care le vom folosi înainte de a face orice codificare. Practic, tabelul de prețuri va avea următoarele componente:

  • Tabelul de prețuri - este o colecție de diferite tipuri de pachete disponibile pentru produsul sau serviciul dvs. Deoarece intenționăm să creăm tabele de tarifare multiple, este mai bine să alegeți un tip de post particularizat numit pricing_tables.
  • Pachetul de prețuri - este o colecție de caracteristici din produsul dvs. care variază în diferite pachete. Deoarece tabelele de tarifare pot conține mai multe pachete, a fost apelat un tip de post particularizat pricing_packages va fi folosit.
  • Caracteristicile pachetului - sunt o colecție de elemente unice ale produsului sau serviciului dvs. Funcțiile vor fi adăugate dinamic utilizând câmpuri personalizate în procesul de creare a unui pachet de prețuri.
  • Formarea tabelului de prețuri - putem alege fie un șablon de pagină, fie un cod scurt pentru a afișa tabelele de prețuri. Vom folosi un shortcode în acest plugin.

Crearea pachetelor de prețuri

Vom folosi un tip de post particularizat numit pricing_packages. Puteți genera pur și simplu un cod pentru crearea unui tip de post personalizat utilizând un generator de coduri online. Următorul cod creează tipul de post personalizat pentru pachete utilizând configurațiile implicite:

 add_action ('init', 'wppt_register_cpt_pricing_packages'); funcția wppt_register_cpt_pricing_packages () $ labels = array ('name' => _x ('Pachete de prețuri', 'pricing_packages'), 'singular_name' => _x ("Adăugați noi", "pricing_packages"), "add_new_item" => _x (" '=> _x (' Pachet de prețuri de căutare ',' pricing_packages '),' view_item '=> _x ), 'not_found' => _x ("Pachete fără prețuri găsite", 'pricing_packages'), 'not_found_in_trash' Pachetul de prețuri pentru părinte: ',' pricing_packages '),' menu_name '=> _x (' Pachete de prețuri ',' pricing_packages ')); $ args = array ('etichete' => etichete $, 'hierarchical' => false, 'description' => > true, 'show_in_name' => true, 'show_in_nav_menus' => true, 'publicly_queryable' => true, 'exclude_from_search' adevărat, 'can_export' => true, 'rewrite' => true, 'capability_type' => 'post'); register_post_type ('pricing_packages', $ args); 

Utilizarea câmpurilor personalizate pentru informații despre pachete

Numele pachetului, prețul și link-ul la cumpărare sunt cele mai importante componente dintr-un pachet de prețuri. Deci, vom folosi o casetă meta pentru a adăuga aceste câmpuri. De asemenea, avem nevoie de mai multe funcții pentru un pachet. Vom folosi o altă casetă de metadate pentru a adăuga și a elimina dinamic funcțiile, așa cum se arată în codul de mai jos.

 add_action ('add_meta_boxes', 'wppt_pricing_packages_meta_boxes'); funcția wppt_pricing_packages_meta_boxes () add_meta_box ("tarifare-pachet-info", "Prețuri pachet Info", "wppt_generate_pricing_package_info", "pricing_packages", "normal", "mare"); add_meta_box ("pricing-features-info", "Caracteristici de stabilire a prețurilor", "wppt_generate_pricing_features_info", "pricing_packages", "normal", "high"); 

Mesajele pentru câmpurile de pachete sunt adăugate utilizând add_meta_boxes acțiune. Puteți utiliza o casetă meta în loc de două. Am folosit două căsuțe meta pentru a clarifica lucrurile.

 funcția wppt_generate_pricing_package_info () global $ post; $ package_price = get_post_meta ($ post-> ID, "_package_price", true); $ package_buy_link = get_post_meta ($ post-> ID, "_package_buy_link", true); $ html = '„; $ html. = '„; $ html. = '„; $ html. = ' „; $ html. = ' „; $ html. = '„; $ html. = '„; $ html. = ' „; $ html. = ' „; $ html. = '„; $ html. = '„; $ html. = '
„; $ html. = ' „; $ html. = '
„; $ html. = ' „; $ html. = '
„; echo $ html;

Prima casetă meta va conține câmpuri pentru link-ul de preț și cumpărare. Cele două câmpuri vor fi salvate în post_meta folosind tabelul _package_price și _package_buy_link chei, respectiv.

Folosirea unui prefix de subliniere pentru câmpurile personalizate va împiedica afișarea acestora în secțiunea câmpuri personalizate a ecranului de creare a postului.
 funcția wppt_generate_pricing_features_info () global $ post; $ package_features = get_post_meta ($ post-> ID, "_package_features", true); $ package_features = ($ package_features == ")? array (): json_decode ($ package_features); $ html. = '„; $ html. = '„; $ html. = ' „; $ html. = '„; $ html. = '
$ html. = ' „; $ html. = ' „; $ html. = '
„; $ html. = '
    „; foreach ($ package_features ca $ pachet_feature) $ html. = '
  • ". $ package_feature. "; $ html. = 'Ștergeți
  • „; $ html. = '
„; echo $ html;

Codul de mai sus conține câmpurile HTML pentru câmpurile pentru pachete. Un pachet va conține multe caracteristici, prin urmare caracteristicile vor fi adăugate dinamic într-o listă neordonată cu câmpuri ascunse utilizând jQuery. Caracteristicile vor fi stocate în post_meta tabelul cu _package_features cheie. Un șir formatat în JSON va fi utilizat pentru a păstra mai multe caracteristici.

Validarea creării pachetului

Prețul pachetului și link-ul de cumpărare sunt obligatorii pentru fiecare pachet. Deci, avem nevoie de un cod de validare înainte de a crea pachete. Vom folosi codul jQuery la validare după cum se arată mai jos.

 jQuery (document) .ready (funcția ($) $ ("# post-body-content") prepend ('
„); $ ("# post_type") return () ($ ("# post_type")) .val () == 'pricing_tables') returnați wppt_validate_pricing_tables ();); );

Trebuie să adăugăm o div element pentru a afișa erori. Ecranul pentru crearea postului conține un formular cu postarea ID. Nu se modifică nici pentru tipurile personalizate de postări. Așadar, am folosit evenimentul prezentat de #post formular pentru validare.

Deoarece folosim diferite tipuri de posturi personalizate, este necesar să filtrați tipul de post utilizând codul de mai jos. Formularul de creare a poștei conține un câmp ascuns cu ID-ul post_type.

 dacă ($ ("# post_type") val () == 'pricing_packages') returnați wppt_validate_pricing_packages ();  altfel dacă ($ ("# post_type") val () == 'pricing_tables') returnați wppt_validate_pricing_tables (); 

Odată ce filtrarea este finalizată, sunăm o funcție de validare specifică în funcție de tipul postului, după cum se arată mai jos.

 var wppt_validate_pricing_packages = funcție () var err = 0; $ ( "# Pricing_error") html ( "").; $ ( "# Pricing_error") ascunde ().; dacă ($ ("title") val () == ") $ (" # pricing_error "

Introduceți numele pachetului.

") () () () () () () () () ()

Introduceți prețul pachetului.

") () () () () () () () () () () ##########################################################################

Introduceți linkul Buy Buy.

") ################################################################################################################ < "returnare false"; altceva return true;;

Mai întâi eliminăm toate erorile existente stabilite anterior în interiorul pricing_error element. Apoi putem valida fiecare câmp și adăugăm mesajul de eroare la pricing_error container. În cele din urmă, afișăm erorile folosind $ ( "# Pricing_error"). Spectacol () funcţie.

După ce ați atins butonul de publicare, WordPress va încerca să salveze postul. Prin urmare, se va încărca stilurile implicite și funcționalitatea. Deoarece folosim validarea jQuery, câteva trucuri trebuie folosite. Putem împiedica dezactivarea butonului Publicare prin utilizarea $ ( "# Publică"). RemoveClass ( "buton-primar-dezactivat"). De asemenea, putem opri imaginea de încărcare ajax folosind $ ( "# Ajax-încărcare"). Ascunde ().

Salvați informațiile despre pachete

Acum am finalizat toate creațiile de teren și validările pentru pachete. Să trecem mai departe la salvarea informațiilor în baza de date. Vom folosi save_post acțiune care se execută imediat după ce postarea este salvată în baza de date.

 add_action ('save_post', 'wppt_save_pricing_packages'); funcția wppt_save_pricing_packages ($ post_id) if (! wp_verify_nonce ($ _POST ['pricing_package_box_nonce'], numele de bază (__FILE__))) return $ post_id;  dacă (definit ('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $ post_id;  if ('pricing_packages' == $ _POST ['post_type'] && current_user_can ('edit_post', $ post_id)) $ package_price = isset ($ _POST ['package_price']) "$ package_buy_link = (isset ($ _POST ['package_buy_link'])? $ _POST ['package_buy_link']:"); $ package_features = (isset ($ _POST ['package_features'])? $ _POST ['package_features']: array ()); $ pachetul_features = json_encode ($ pachet_features); update_post_meta ($ post_id, "_package_price", $ package_price); update_post_meta ($ post_id, "_package_buy_link", $ package_buy_link); update_post_meta ($ post_id, "_package_features", $ package_features);  altceva return $ post_id; 

Mai întâi, facem niște validări pentru a verifica dacă valoarea nonce generată în formular se potrivește cu valoarea nonce primită în $ _POST. Apoi trebuie să ne asigurăm dacă este o salvare automată sau salvare manuală. Înainte de a salva, trebuie să verificăm tipul postării. În caz contrar, acest cod va fi executat pentru fiecare tip de post. Prețul pachetului și linkul de cumpărare vor fi salvate direct în post_meta tabel folosind update_post_meta funcţie. Caracteristicile vor fi salvate ca un șir JSON codificat. Acum, am terminat cu crearea de pachete. Să trecem la crearea tabelelor de prețuri.


Crearea de tabele de prețuri

Tabelele de prețuri vor fi un alt tip de post personalizat pe pluginul nostru. Crearea tipului de posturi personalizate și salvarea lor în baza de date este foarte asemănătoare cu codul explicat anterior. Deci nu o voi face plictisitor explicând același lucru. Puteți găsi crearea postului personalizat și codul de salvare pentru tabelele de prețuri în fișierele de pluginuri.

Tabelele de prețuri conțin pachete de prețuri. Prin urmare, căsuțele meta utilizate pentru tabelele de prețuri vor fi diferite de cele utilizate pentru pachetele de prețuri. Să aruncăm o privire la crearea meta-box pentru tabelele de prețuri.

 add_action ('add_meta_boxes', 'wppt_pricing_tables_meta_boxes'); funcția wppt_pricing_tables_meta_boxes () add_meta_box ("tarif-table-info", "tabelul de prețuri", "wppt_generate_pricing_table_info", "tabletele de preț", "normal", "mare");  funcția wppt_generate_pricing_table_info () global $ post; $ table_packages = get_post_meta ($ post-> ID, "_table_packages", true); $ table_packages = ($ table_packages == ")? array (): json_decode ($ table_packages); $ query = noi WP_Query (array ('post_type' => 'pricing_packages', 'post_status' => 1, 'orderby' => 'post_date', 'comanda' => 'ASC')); $ html = '„; $ html. = '„; $ html. = '„; $ html. = ' „; în timp ce ($ query-> have_posts ()): $ query-> the_post (); $ checked_status = (in_array ($ interogare-> post-> ID, $ table_packages))? "verificat": ""; $ html. = '„; $ html. = ' „; endwhile; $ html. = '
Stare pachetNumele pachetului
". $ query-> post-> post_title. '
„; echo $ html;

Putem adăuga o casetă de metode personalizate pentru tabelele de prețuri care utilizează un cod similar celui folosit în secțiunea anterioară. Pachetele unei mese specifice vor fi stocate în post_meta tabel ca un șir JSON codificat. Deci, primim pachetele pentru masa curentă folosind get_post_meta funcţie. Apoi vom obține toate pachetele de prețuri publicate utilizând o interogare particularizată, după cum se arată mai jos.

 $ query = = noua 'WP_Query' (array ('post_type' => 'pricing_packages', 'post_status' => 'publish', 'posts_per_page' => '));

Putem selecta pachetele folosind pricing_packages post tip personalizat. Puteți alege alte condiții pentru interogare în funcție de preferințele dvs..

WP_Query va returna numărul implicit de înregistrări în rezultat dacă posts_per_page nu este specificat. Puteți obține toate posturile fără nici o limită prin utilizarea -1 pentru posts_per_page condiție.

Apoi vom folosi rezultatul generat de WP_Query pentru a afișa toate pachetele de prețuri cu casetele de selectare în fața lor. În timpul looping-ului verificăm dacă pachetul este deja atribuit tabelului și atribuie un check la caseta de validare. Puteți să adăugați sau să eliminați dinamic pachetele selectând / deselectând casetele de selectare și apăsând butonul de actualizare.

Validarea creării tabelului de prețuri

Vom valida numele tabelului de prețuri, așa cum am făcut mai devreme cu pachetele de prețuri. Următorul cod jQuery va fi folosit pentru validare:

 var wppt_validate_pricing_tables = funcție () var err = 0; $ ( "# Pricing_error") html ( "").; $ ( "# Pricing_error") ascunde ().; dacă ($ ("title") val () == ") $ (" # pricing_error "

Introduceți numele tabelului de prețuri.

") ################################################################################################################ < "returnare false"; altceva return true;;

Codul de mai sus este inclus în pricing_admin.js fișier în js folderul pluginului.

Generarea ID-ului tabelului de prețuri

Avem nevoie de o cheie unică pentru mesele pricng pentru a le include în codul scurt. Prin urmare, vom folosi ID-ul tabelului de prețuri drept cheie. Odată ce tabela este creată, putem afișa ID-ul tabelului de prețuri în vizualizarea de listă utilizând o coloană personalizată. WordPress oferă o tehnică simplă pentru a include coloane personalizate în vizualizarea listei după cum se arată mai jos:

 add_filter ('manage_edit-pricing_tables_columns', 'wppt_edit_pricing_tables_columns'); funcția wppt_edit_pricing_tables_columns ($ coloane) $ columns = array ('cb' => '',' ID '=> __ ("ID tabelul de prețuri"), "titlu" => __ ("Nume tabel de prețuri"), "data" => __ ("data")); returnează coloane $; 

Putem folosi manage_edit- Custom Post Type _columns filtrați pentru a personaliza coloanele afișate în vizualizarea listei. După cum puteți vedea, am atribuit o coloană personalizată numită ID-ul Tabelului de prețuri pentru a utiliza ID-ul postului.

 add_action ('manage_pricing_tables_posts_custom_column', 'wppt_manage_pricing_tables_columns', 10, 2); funcția wppt_manage_pricing_tables_columns (coloană $, $ post_id) global $ post; comutator (coloana $) caz 'ID': $ pricing_id = $ post_id; dacă (gol ($ pricing_id)) echo __ ("Necunoscut"); altceva printf ($ pricing_id); pauză; prestabilit: pauză;  add_filter ('manage_edit-pricing_tables_sortable_columns', 'wppt_pricing_tables_sortable_columns'); funcția wppt_pricing_tables_sortable_columns ($ coloane) coloane $ ['ID'] = 'ID'; returnează coloane $; 

Apoi putem atribui valorile coloanei utilizând o instrucțiune de comutare pe manage_ Custom Post Type _posts_custom_column acțiune. În cele din urmă, folosim manage_edit- Custom Post Type _sortable_columns filtrați pentru a face coloana să se încadreze. După crearea unei tabele de prețuri, veți putea vedea numărul din vizualizarea listei.


Inclusiv scripturile și stilurile Plugin

Am folosit un fișier JavaScript personalizat pentru validarea funcțiilor din zona de administrare. Deci, mai întâi vom examina modul în care fișierele de script sunt incluse în zona de administrare WordPress.

 funcția wppt_pricing_admin_scripts () wp_register_script ('pricing-admin', plugins_url ('js / pricing_admin.js', __FILE__), array ('jquery')); wp_enqueue_script ("tarifare-admin");  add_action ('admin_enqueue_scripts', 'wppt_pricing_admin_scripts');

admin_enqueue_scripts este un cârlig care poate fi folosit pentru a include toate fișierele CSS și Script din zona de administrare a WordPress. Mai intai trebuie sa inregistram scriptul folosind wp_register_script funcția cu o cheie unică și calea spre fișier. Apoi putem folosi wp_enqueue_script pentru a include fișierele.

Acum, să aruncăm o privire asupra includerii stilurilor și scenariilor din capătul frontal folosind codul de mai jos:

 funcția wppt_pricing_front_scripts () wp_register_style ('base-pricing', plugins_url ('css / base.css', __FILE__)); wp_enqueue_style ("baza de prețuri"); wp_register_style ("preț-layout", plugins_url ('css / layout.css', __FILE__)); wp_enqueue_style ("preț-layout"); wp_register_style ("preț-fluid-schelet", plugins_url ("css / fluid_skeleton.css", __FILE__)); wp_enqueue_style ("preț-fluid-schelet"); wp_register_style ("tabelul de prețuri", plugins_url ('css / pricing_table.css', __FILE__)); wp_enqueue_style ("tabelul de prețuri");  add_action ('wp_enqueue_scripts', 'wppt_pricing_front_scripts');

La începutul tutorialului am menționat că vom crea un tabel de prețuri receptiv. Este mai ușor să lucrați cu un cadru CSS existent pentru a oferi funcționalitate receptivă. Așa că am ales Skeleton ca cadru CSS. Primele trei fișiere CSS vor fi fișiere CSS ale cadrului scheletului, apoi am inclus un stil personalizat pentru tabelul nostru de prețuri în pricing_table.css fişier.

Acum, toate datele necesare pentru tabelul de prețuri sunt gata și putem trece la crearea tipului de tabel de prețuri.


Proiectarea tabelului de prețuri

Proiectarea unui tabel de prețuri receptiv este o sarcină consumatoare de timp și necesită cunoștințe avansate în HTML și CSS. Prin urmare, explicarea designului este în afara scopului acestui tutorial. Voi folosi un tabel de prețuri receptiv pe care l-am creat pentru Webdesigntuts +. Dacă sunteți interesat puteți afla despre partea de proiectare prin citirea tabelelor de prețuri responsabile folosind :ţintă pentru tutorialul Small Screens. Următorul cod conține codul HTML pentru un tabel de prețuri cu două pachete:

 
De bază
$ 9.99
Vedere
1GB Depozitare
5GB Lățime de bandă
2 domenii
3 Baze de date
1 Cont FTP
25 Conturi de e-mail
Cumpară acum
Standard
$ 19.99
Vedere
10GB Depozitare
50GB Lățime de bandă
10 domenii
25 Baze de date
10 Cont FTP
100 Conturi de e-mail
Cumpară acum

Acum trebuie să alegem o metodă de includere a codului mesei de tarifare în WordPress. Putem să includem acest cod într-un cod scurt sau să creăm un anumit șablon de pagină. Voi folosi un scurtcod. Puteți încerca și metoda șablonului de pagină.


Crearea unei scurte de prețuri

Codurile scurte reprezintă o modalitate ușoară de a adăuga funcții dinamice postărilor și paginilor dvs. Voi folosi un shortcode numit wppt_show_pricing pentru introducerea unui tabel de prețuri. Trebuie să transmitem ID-ul tabelului de prețuri ca parametru de cod scurt utilizând pricing_id cheie. Să implementăm codul scurt.

 add_shortcode ("wppt_show_pricing", "wppt_generate_pricing_table"); funcția wppt_generate_pricing_table ($ atts) global $ post; extrageți (shortcode_atts (array ('pricing_id' => '0',), $ atts)); // Codul rămas

Am definit un shortcode numit wppt_show_pricing folosind WordPress " add_shortcode funcţie. Atributele de cod scurt vor fi transmise automat funcției.În primul rând extragem matricea de coduri scurte și ID-ul tabelului de prețuri va fi atribuit pricing_id variabil. Restul codului va fi explicat în secțiunile următoare.

 postare globală $; $ table_packages = get_post_meta ($ pricing_id, "_table_packages", true); $ table_packages = ($ table_packages == ")? array (): json_decode ($ table_packages);

Apoi primim ID-ul tabelului de preț atribuit codului scurt și tuturor pachetelor incluse în tabelul de prețuri de la post_meta masa.

 $ html = '
„; $ pricing_index = 0; foreach ($ table_packages sub formă de $ table_package) $ pricing_index ++; $ plan_title = get_the_title ($ table_package); $ package_price = get_post_meta ($ table_package, "_package_price", true); $ package_buy_link = get_post_meta ($ table_package, "_package_buy_link", true); $ package_features = get_post_meta ($ table_package, "_package_features", true); $ package_features = ($ package_features == ")? array (): json_decode ($ package_features); $ html. = '
„; $ html. = '
". $ plan_title. '
$ '. $ package_price. '
„; $ html. = '
Vedere
„; foreach ($ package_features ca $ pachet_feature) $ html. = '
". $ package_feature. '
„; $ html. = '
Cumpară acum
„; $ html. = '
„; $ html. = '
„; echo $ html;

În timp ce traversăm prin fiecare pachet generat în codul anterior, obținem caracteristicile și detaliile pachetelor utilizând get_post_meta funcţie. Apoi vom include codul HTML cu date dinamice pentru a afișa tabelul de stabilire a prețurilor. În cele din urmă vom returna codul HTML generat care va fi afișat în paginile care conțin codul scurt.

Acum am finalizat dezvoltarea pluginului nostru de tabel de prețuri pentru WordPress. Puteți trece prin codul sursă și puteți adăuga propriile funcții personalizate în funcție de preferințele dvs..


Instrucțiuni pentru utilizarea tabelului de prețuri

Oricine are cunoștințele de bază despre lucrul cu WordPress va fi capabil să creeze tabele de tarifare utilizând acest plugin. Voi oferi pașii pentru a face mai ușor pentru utilizatorii fără o experiență de mult în WordPress.

  • Faceți clic pe secțiunea Pachetele de prețuri din meniul din partea stângă și creați un pachet cu numele, prețul, linkul de cumpărare și caracteristicile. Continuați acest proces până când creați toate pachetele.
  • Apoi faceți clic pe tabelele de prețuri din meniul din stânga pentru a adăuga un nou tabel de prețuri. În partea de jos a ecranului se va afișa o listă cu pachetele de prețuri. Selectați pachetele dorite și salvați tabelul de prețuri cu un anumit nume.
  • Accesați lista de tabele de prețuri și găsiți ID-ul tabelului de preț al tabelului nou creat.
  • Apoi faceți clic pe secțiunea Pagini pentru a adăuga o pagină nouă. Introduceți codul scurt [wppt_show_pricing pricing_id = "ID" /] în interiorul editorului de pagini. Înlocuiți ID-ul cu ID-ul real al tabelului de prețuri.
  • Salvați pagina și vizualizați-o într-un browser. Veți primi tabelul de prețuri receptiv.
Crearea unor mese de tarifare receptive nu este o sarcină ușoară și necesită o mulțime de lucrări manuale bazate pe design. Asigurați-vă că păstrați tabelul de prețuri la maxim 4 pachete de prețuri pe tabelul de prețuri. Redimensionați browserul pentru a vedea efectele receptive în acțiune. postări asemănatoare
  • Tabele de prețuri responsabile :ţintă pentru ecrane mici

Sper că ați învățat cum să utilizați Tipuri personalizate de posturi și Meta Boxe pentru a crea un tabel de prețuri. Spuneți-ne dacă aveți propriul dvs. mod de a crea un astfel de plugin prin comentariile de mai jos.

Cod