Acasă » Blog » WordPress Feed – Interogare baza de date dupa post_status

WordPress Feed – Interogare baza de date dupa post_status

Share this post on social!
Realizare site Wordpress - Capital.ro/comunicate

Interogarea implicita a WordPress dupa post_status la crearea feed-ului

WordPress interogheaza baza de date pentru construirea feed-ului implicit al blog-ului aparent doar pentru articolele cu starea “publish”. Dar nu este asa. Conditia starii este dubla: dupa post_status=”publish” OR post_status=”private”.

Asta ar fi cum ar fi, pentru ca feed-ul depinde de utilizatorul logat doar daca url-ul feed-ului este rulat in browser.

Pe noi ne intereseaza un caz mai practic, de exemplu atunci cand feed-ul este apelat de site-uri externe pentru preluare de articole de la noi  si afisare pe site-urile respective.

In acest caz, post_status=”private” nu mai conteaza si ramane valabila doar conditia post_status=’publish’.

Totul este clar acum, dar mai exista o situatie neasteptata: daca din program cream o stare personalizata sa ii spunem… “respins”,  WordPress va face interogarea implicita post_status=”publish” OR post_status=”private” OR post_status=”respins”

Asta incepe sa puna probleme. In cazul in care un articol propus spre verificare este “respins” , acesta nu trebuie sa fie publicat sub nici o forma. Si pe site nu este publicat, pentru ca nu are status-ul “publish” ci “respins”. Dar feed-ul il afiseaza, ceea ce va duce la preluarea articolelor respinse de catre site-urile externe. Tragedia nu e mare, penru ca daca cineva le acceseaza, va gasi pe site-ul nostru “Pagina nu a fost gasita”

Pentru a remedia aceasta problema neasteptata a WordPress, vom pune in functions.php urmatoarea actiune:

function sweb_change_feed_query($query){
     if (!$query->is_admin && $query->is_feed){
           //trimit catre widget-urile de pe site-urile externe doar comunicate publicate
           $query->set('post_status', 'publish' );
     }
}
add_action('pre_get_posts', 'sweb_change_feed_query');

Am avut la capital.ro/magazin-comunicate aceasta situatie in care un comunicat respins a fost afisat pe site-ul evz.ro. Din aproape in aproape am descoperit cauza si solutia…si inca un detaliu de functionare a WordPress.

 

Traian Constantin Predan

Traian Constantin Predan

Inginer absolvent al Politehnicii București proiectează și construiește sisteme online. Lucrează proiecte extrem de diverse, îi plac viziunile noi care provoacă la dezvoltarea unor soluții tehnice eficiente și stabile.