Skelbimas

ajax WordPress komentaraiPagal numatytuosius nustatymus „WordPress“ komentavimo sistema yra labai netinkama - vienas didžiausių mano priekaištų yra tas, kad norėdamas paskelbti komentarą puslapis turi būti atnaujinamas. Galite pereiti prie trečiųjų šalių sistemos, tokios kaip „Livefyre“ [Sugadintas URL pašalintas] arba Disqus 3 būdai, kaip paskatinti savo „WordPress“ tinklaraščio komentarusGauti komentarus apie savo tinklaraštį yra puikus motyvas, leidžiantis tęsti tolimą tinklaraštį. Tiesiog žinant, kad kažkas yra lauke, vertinti tavo darbą jaučiasi puiku, bet ne ... Skaityti daugiau , bet jei norėtumėte laikyti viską namuose ar atlikti kitokius pritaikymus, tada mažiausiai turėtumėte daryti „AJAX“ komentarus.

Čia galite pamatyti šio darbo pavyzdį Pasinaudoti - kai rašysite komentarą, neišmesite iš šio puslapio. Vietoj to mes jį išsiųsime AJAX skambučiu, o tada išsiųsime greitą „AčiūAtkreipkite dėmesį. Perskaitykite visą mokymo programą.

Norėdami naudoti ne „WordPress“ funkcijas kaip AJAX, skaitykite mano

instagram viewer
ankstesnis mokymas AJAX naudojimo vadove „WordPress“ instrukcijaAJAX yra nuostabi žiniatinklio technologija, kuri perkėlė mus už paprastesnės „spustelėjimo nuorodos, eik į kitą puslapį“ ribų. interneto 1.0 struktūra. Tai leidžia svetainėms dinamiškai atsisiųsti ir rodyti turinį be Vartotojas... Skaityti daugiau , ir būtinai peržiūrėkite visus su „WordPress“ susijusius straipsnius.

Įvadas

Norint, kad „AJAX WordPress“ komentarai veiktų, yra dvi atskiros dalys, todėl pirmiausia paaiškinkime jas, kad pateiktume viso proceso apžvalgą.

  • Keletas „Javascript“ puslapyje, kuris sulaiko vartotoją spustelėjus Pridėti komentarą Pateikti mygtuką, kuris taip pat tampa AJAX skambučiu, taip pat tvarko atsakymą.
  • PHP tvarkyklė, įtraukianti į „comment_post“ veiksmą

„Java“ scenarijus

Pirmiausia to reikės jQuery, kaip ir tai, kas šiais laikais labai įdomu interneto svetainių kūrime. Jei nesate tikri, ar jis jau yra įkeltas, pereikite prie „Javascript“ kodo ir vis tiek išbandykite - jei turite „Firebug“, o konsolės žurnalas sako „„jQuery“ nėra apibrėžta“, Kai atnaujinsite puslapį, tada pridėkite šią eilutę prie failo function.php, kad įsitikintumėte, jog jis įkeltas.

funkcija google_jquery () { if (! is_admin ()) {wp_deregister_script ('jquery'); wp_register_script ('jquery', (" http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"), melagingas); wp_enqueue_script ('jquery'); }} add_action ('wp_print_scripts', 'google_jquery');

Atminkite, kad tai sudėtingas būdas įkelti „jQuery“, nes mes naudosime naujausią „Google CDN“ versiją, kuri yra greitesnė ir tinkamesnė datą, nei numatyta pagal numatytuosius nustatymus „WordPress“ - todėl gali būti naudinga tai pridėti, net jei „jQuery“ jau yra įkeltas kitur.

Dabar turime keletą variantų, kaip naudoti „Javascript“, kuris tvarkys komentarų formą. Paprasčiausia yra tiesiog įklijuoti kodą į savo single.php šablonas - darant prielaidą, kad komentarų taip pat neįgalinote puslapiuose.

Arba galite įklijuoti į esamą .js failą, kurį naudoja jūsų tema, arba sukurkite naujas .js failą į savo temų katalogą. Jei nuspręsite įdėti jį į savo atskirą .js failą, o ne įklijuoti tiesiai į temos šabloną, būtinai pridėkite šias eilutes prie savo funkcijos.php, ir atkreipkite dėmesį, kad manoma, jog failo vardas yra ajaxcomments.js temos aplanko šaknyje.

add_action ('init', 'ajaxcomments_load_js', 10); funkcija ajaxcomments_load_js () {wp_enqueue_script ('ajaxcomments', get_stylesheet_directory_uri (). '/ ajaxcomments.js'); }

Čia yra „Javascript“, skirtas tvarkyti komentaro formą (ar galite peržiūrėkite jį pastebin):

 // AJAXifikuota komentavimo sistema. „jQuery“ („dokumentas“). paruoštas (funkcija ($) { var commentform = $ ('# commentform'); // rasti komentaro formą. commentform.prepend ('
'); // pridėkite informacijos skydą prieš formą, kad pateiktumėte atsiliepimą ar klaidas. var statusdiv = $ ('# komentaro būsena'); // apibrėžti infopanel komentarą.skelbti (function () { // Serijos ir saugokite formos duomenis kintamajame. var formdata = commentform.serialize (); // Pridėti būsenos pranešimą. statusdiv.html ('

Apdorojama...

'); // Ištraukite veiksmo URL iš komentaro formos. var formurl = commentform.attr ('veiksmas'); // Skelbimo forma su duomenimis. $ .ajax ({ tipas: 'post', url: formurl, data: formdata, error: function (XMLHttpRequest, textStatus, errorThrown) { statusdiv.html ('

Galbūt vieną lauką palikote tuščią arba per greitai paskelbiate

'); }, sėkmė: funkcija (duomenys, „textStatus“) { if (duomenys == "sėkmė") statusdiv.html ('

ačiū už komentarą. Mes vertiname jūsų atsakymą.

'); Kitas. statusdiv.html ('

Prašome palaukti šiek tiek prieš paskelbiant kitą komentarą

'); commentform.find ('textarea [vardas = komentaras]'). val (''); } }); grąžinti klaidingą; }); });

Norėdami suskaidyti kodą, pirmiausia sukuriame komentaro formos „jQuery“ objektus (darant prielaidą, kad jūsų komentaro forma turi numatytąjį css ID kaip „commentform“)ir virš jo pridėję tuščią informacijos skydą, kurią vėliau naudosime norėdami parodyti vartotojui pranešimus apie jų komentarų paskelbimo eigą.

commentform.submit naudojamas „pagrobti“ pateikimo mygtuką. Tada mes serijuojame formos duomenis (paverčiame juos viena ilga duomenų eilute), pateikiame „ApdorojimasPranešimą vartotojui tame informacijos skydelyje ir eikite su AJAX užklausa. AJAX užklausa yra standartinis formatas, bet iš tikrųjų ne šios mokomosios dalies apimtimi šiandien - pakanka pasakyti, kad tai reaguoja į sėkmę arba klaida ir, jei pavyksta, užpildo formą, kad netyčia nebūtų paskelbtas tas pats komentaras du kartus. Jei norite, kad klaidų pranešimai kažkaip išsiskirtų, atitinkamai pakoreguokite pranešimus ir klaidas arba pridėkite tinkamą stilių prie savo stiliaus stiliaus lentelės. Paskutinė eilutė - grąžinti klaidingą - neleidžia formai užpildyti numatytojo veiksmo.

PHP prižiūrėtojas

Galiausiai mums reikia kažko, kad būtų užkirstas kelias atnaujinti puslapį ir vartotojui būtų atsiųstas tinkamas atsakymas taip pat pranešti administratoriui, jei komentarą reikia moderuoti, arba pranešti naujo komentaro autoriui. Dėl to mes kabiname į komentaras_postas veiksmas, kuris atliekamas iškart po to, kai jis pridedamas prie duomenų bazės, ir nustatykite, ar tai buvo AJAX užklausa. Pridėkite tai prie savo funkcijos.php failas:

(Taip pat galima tuo pastebiu)

add_action ('comment_post', 'ajaxify_comments', 20, 2); funkcija ajaxify_comments ($ comment_ID, $ comment_status) { if (! tuščias ($ _ SERVER ['HTTP_X_REQUESTED_WITH']) && strtolower ($ _ SERVER ['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { // Jei AJAX užklausa tada. perjungti ($ comment_status) { atvejis '0': // praneškite moderatoriui apie nepatvirtintą komentarą. wp_notify_moderator ($ comment_ID); 1 atvejis: // Patvirtintas komentaras. aido „sėkmė“; $ commentdata = & get_comment ($ comment_ID, ARRAY_A); $ post = & get_post ($ commentdata ['comment_post_ID']); wp_notify_postauthor ($ comment_ID, $ commentdata ['comment_type']); pertrauka; numatytasis: aido „klaida“; } išėjimas; } }

Taškinės problemos

Jei puslapis vis dar atnaujinamas, o ne skelbiamas per AJAX, tai greičiausiai yra viena iš dviejų problemų. Viena - galbūt neturite įkeltos „jQuery“. Diegti Ugniažolė Kaip įdiegti „Firebug“ „IE“, „Safari“, „Chrome“ ir „Opera“ Skaityti daugiau , arba įgalinkite „Chrome“ kūrėjų įrankius ir patikrinkite, ar konsolės žurnale nėra klaidų. Jei „jQuery“ nerasta, grįžkite į „JavaScript“ skiltį ir perskaitykite pirmąjį „jQuery“ pridėjimo prie savo temos pirmąjį skyrių. Antra galimybė yra tai, kad jūsų tema daro ką nors ypatingo komentaro formoje ir jos ID nebebus „komentaro forma“. Patikrinkite šaltinio kodą, tada sureguliuokite var commentform = $ („# commentform“) eilutėje „JavaScript“, kad būtų teisingas ID - tai gali veikti.

Kaip visada, aš stengiuosi kuo daugiau padėti, tačiau prašau atsiųsti nuorodų į URL pavyzdį, kur galėčiau greitai apsižvalgyti.

Jamesas yra dirbtinio intelekto bakalauras ir yra CompTIA A + bei Network + sertifikuotas. Jis yra pagrindinis „MakeUseOf“ kūrėjas ir laisvalaikį praleidžia žaisdamas VR dažasvydį ir stalo žaidimus. Nuo mažens jis statė kompiuterius.