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.
Află detalii privind realizarea site-urilor pe WordPress
Creare site WordPress
Sau ia legatura cu noi aici