WordPress Feed – Interogare baza de date dupa post_status

By

Traian

Blog IT, PHP, Wordpress

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.

 

Etichete

 

Comments are closed.

 
 
 

X