Interogare articole doar cu imagini reprezentative
Vreau să interoghez 6 articole, dar doar cele care au atașată o imagine reprezentativă. Folosesc metoda meta_key
cu WP_Query
astfel:
$args = array(
'post_type' => 'post',
'meta_key' => '_thumbnail_id',
'post_count' => 6 );
$query = new WP_Query($args);
Urmat de
<?php while($query->have_posts()) : $query->the_post(); ?>
<h2><?php the_title(); ?></h2>
<?php the_post_thumbnail('thumbnail'); ?>
<?php endwhile; ?>
Acest lucru nu pare să funcționeze. Interogarea returnează mai mult de 6 articole și, de asemenea, pe cele care nu au o imagine reprezentativă. Aveți idee ce am greșit?
@chip: var_dump($query);
oferă un rezultat mare așa că l-am postat într-un pastebin

Începând cu WordPress 3.5, Parametrii Interogării Meta acceptă operatorii de comparare EXISTS
și NOT EXISTS
. În cazul în care utilizați acești operatori, puteți omite partea value
din interogarea meta. Încercați următorii parametri pentru interogarea dumneavoastră:
$args = array(
'post_type' => 'post',
'posts_per_page' => 6,
'meta_query' => array(
array(
'key' => '_thumbnail_id',
'compare' => 'EXISTS'
),
)
);

Mulțumesc pentru sugestie. Acum primesc cele 6 postări, dar încă primesc postări fără imagini miniatură.

Am testat acest lucru și a funcționat pentru mine. Dar am observat că va returna entitățile care au meta setat, dar din anumite motive ID-ul atașamentului nu este corect. Așa că verifică dacă postările tale au setate imaginile reprezentative. În caz contrar, nu știu care ar putea fi problema.

Da, rulez cea mai recentă versiune de WordPress - instalată proaspăt pe serverul meu local de dezvoltare într-o configurație de rețea (multisite).

Doar câteva informații suplimentare: Există un bug nerezolvat, vezi ticketul trac 23268, care face necesară utilizarea unei valori dacă este folosit NOT EXISTS
.

Când rulezi importatorul, trebuie să bifezi caseta pentru a descărca și importa toate fișierele media/atașamente, iar serverul original trebuie să fie accesibil de pe serverul care efectuează importul.
Dacă nu faci acest lucru, articolele nu vor avea o imagine reprezentativă validă și nu vor fi afișate în bucla ta. Orice încercare de a folosi the_post_thumbnail
va eșua, dând impresia că nu au nicio imagine reprezentativă.
Pentru a remedia această problemă, șterge articolele și reimportă-le folosind setările corecte, asigurându-te că vechiul server este încă accesibil la URL-ul original.
De asemenea, pentru a demonstra punctul, nu ai verificat niciodată articolele. Întotdeauna verifică, de exemplu:
if ( $query->have_posts() ) { // nu ai verificat niciodată dacă nu s-au găsit articole
while($query->have_posts()) { // sintaxa alternativă nu funcționează cu majoritatea IDE-urilor
// fiecare instrucțiune ar trebui să fie pe o linie separată
$query->the_post();
// ai nevoie doar de taguri de deschidere/închidere aici, nu pe fiecare linie, economisește timp
?><h2><?php the_title(); ?></h2><?php
// afișează imaginea reprezentativă doar dacă există cu adevărat
if ( has_post_thumbnail() ) {
echo '<p>articolul afirmă că are o imagine reprezentativă</p>'; // verificare dublă
the_post_thumbnail('thumbnail');
} else {
echo '<p>acest articol nu are o imagine reprezentativă</p>';
}
}
} else {
echo '<p>nu s-au găsit articole</p>';
}
Dacă nu ai bifat caseta, vei primi mesaje că articolele au imagini reprezentative, dar nicio imagine nu va fi afișată.

Bănuiesc că acesta este motivul pentru care răspunsul pe care l-am oferit nu funcționează conform așteptărilor. Plugin-ul WordPress Suicide este destul de util pentru ștergerea tuturor conținuturilor.

Cu siguranță am bifat acea casetă. Totuși, în experiența mea, nu a funcționat niciodată pentru mine. Toate imaginile erau legate înapoi către site-ul extern. Am folosit plugin-ul Import External Images(http://wordpress.org/extend/plugins/import-external-images/) pentru a stoca imaginile local și a le atașa.

M-am gândit la același lucru, am bifat cu siguranță caseta, de ce tot nu funcționează? Am întâlnit această problemă de la clienți și este atât de ușor să greșești, așa că ștergeți postările, reimportați și asigurați-vă că este bifată, iar dacă tot nu funcționează, atunci o puteți exclude. Altfel, există un discurs al lui Neil DeGrasse Tyson despre cât de patetic de slabă este memoria umană. Chiar acum aș putea să vă cer să debifați a doua casetă și probabil v-ați aminti că ați văzut-o și pe aceea (dar nu există una).

și între timp, înfășoară the_post_thumbnail
cu un apel has_thumbnail
și adaugă un caz else, astfel încât să știi clar și fără ambiguitate că articolul nu are o imagine reprezentativă

De asemenea, asigură-te că serverul tău poate accesa serverul la distanță. Dacă serverul tău nu poate face cereri la distanță, nu va putea importa. S-ar putea să fie nevoie să ștergi fișierele media deja preluate

@Tom mulțumesc pentru comentarii. Știu că spui că e ușor să uiți să faci ceva, dar SIGUR am bifat caseta. Problema este că de foarte multe ori nu a funcționat pentru mine; bifez caseta, dar niciuna dintre imagini nu se importă și rămân cu toate articolele având imagini legate extern. Serverul meu este o simplă configurație Xampp care rulează pe MacOS și care are acces la distanță. Cred că e o combinație între eșecul casetei de bifat și pluginul pe care l-am folosit pentru a prelua toate imaginile, care nu a reușit să le "featureze" corect. Voi încerca sugestiile tale diseară și voi reveni cu feedback

XAMPP este doar un instrument pentru Windows? În loc să dezbatem ce crezi că știi și despre sentimentele tale, demonstrează prin codul de depanare și postează date utile, clare, lipsite de ambiguitate. Literele mari nu te vor ajuta. Am reușit să reproduc această problemă de multe ori atât local, cât și pe serverele clienților, bifând sau debifând caseta, și am făcut și eu greșeala, iar în prezent aceasta este cea mai precisă teorie având în vedere informațiile furnizate. Dacă nu ești de acord, atunci furnizează informații noi pentru a putea ajunge la o teorie mai bună.

Nu, Xampp funcționează bine și pe Mac! Din păcate nu există dovezi concrete că am bifat sau nu caseta, dar asta e cam irelevant. Problema apare pentru că importul media a eșuat - postarea crede că are o imagine reprezentativă deoarece meta tag-ul este prezent, dar nu există nicio imagine reală. Adăugarea unei noi imagini reprezentative și eliminarea ei împiedică postarea să apară, arătând că interogarea funcționează, ceea ce voiam să aflu. Mulțumesc pentru sugestii.
