Ich habe folgende Abfrage, um Beiträge nach meinem benutzerdefinierten Beitragstyp auszuwählen. Dies funktioniert problemlos, wenn Sie sich auf der Startseite befinden (das Snippet ist in der Seitenleiste enthalten). Sobald es auf einer Kategorieseite ausgeführt wird, wird das Attribut post_type
ignoriert und Beiträge vom Typ "post" zurückgegeben. Ich denke, das hat mit mehreren Schleifen zu tun, aber ich habe auch versucht, wp_reset_postdata();
und wp_reset_query();
vorher und nachher aufzurufen.
$customPosts = new WP_Query( array(
'post_type' => 'mycustomtype',
'posts_per_page' => 12,
'orderby' => 'date',
'order' => 'DESC',
'post_status' => 'publish'
));
while ( $customPosts->have_posts() ) : $customPosts->the_post();
$thumbnailUrl = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), "thumbnail");
if ( !empty($thumbnailUrl)) {
/* echo result */
}
endwhile;
ich bin mir nicht ganz sicher, in welchem Kontext Sie sich gerade befinden. Es gibt eine Reihe möglicher Lösungen.
zuerst müssen Sie sicherstellen, dass Sie wie erwartet auf $post
zugreifen. Mit anderen Worten, stellen Sie sicher, dass es nicht von anderen Aktivitäten betroffen ist, während WordPress die Seite erstellt.
ich weiß nicht, ob $post
das Objekt enthält, das Sie an diesem Punkt im Fluss erwarten - weil fast alles das überschreiben könnte. Und wenn ich mir Ihren Code ansehe, sehe ich nicht einmal, wo Sie $post
für Ihre eigene Verwendung zuweisen.
ich habe bemerkt, dass Sie get_post_thumbnail_id($post->ID)
anrufen. Ich glaube, Sie können Ihr Problem mit $customPosts->$post->ID
anstelle von $post->ID
lösen.
ich halte Tidys Antwort für eine Lösung - abgesehen von dem Vorschlag, $post
in $customPost
zu ändern.
wirklich, meine Antwort ist allgemeiner, das heißt: stellen Sie sicher, dass Sie keine Variablennamen kreuzen .
unter bestimmten Bedingungen funktioniert Ihr Code möglicherweise, während unter anderen Bedingungen möglicherweise ein Problem auftritt, wenn andere Aktivitäten diese Variable ändern. $post
kann von etwas anderem in WordPress geändert werden leicht (offensichtlich).
auf einer Kategorieseite werden die Posts beispielsweise von WordPress generiert und verwenden die globale Variable $post
für sich. Nach meinen Erfahrungen würde ich alles wetten, was ich dazu habe, dass es dein Problem ist. Dann bricht plötzlich Ihr Widget mit einer Post-Schleife auf diesen Seiten ...
andere Dinge, die Sie in dieser Situation oder in der Zukunft ausprobieren können (aber sie müssen mit the loop
aufgerufen werden:
the_post_thumbnail( array(100, 100) );
in Ihrer Schleife
oder versuchen Sie es mit $thumb = get_the_post_thumbnail( array(100, 100) );
Haben Sie versucht, stattdessen get_posts () zu verwenden?
//#get access to post settings
global $post;
//#set parameters for extra loop
$args = array(
'post_type' => 'mycustomtype',
'posts_per_page' => 12,
'orderby' => 'date',
'order' => 'DESC',
'post_status' => 'publish'
);
//#get posts
$customPosts = get_posts($args);
//#loop through them
foreach($customPosts as $post)
{
//#set all the loop functions to use data from this post
setup_postdata($post);
//#do what you want with the post
}
Dies wird Ihr Problem lösen, ich hatte das gleiche Problem, als ich dies ausdrückte, hat es perfekt funktioniert.
$args = array(
'post_type' => 'mycustomtype',
'posts_per_page' => 12,
'orderby' => 'date',
'order' => 'DESC',
'post_status' => 'publish',
'tag' => 'mycustomtag',
'cat' => 'mycustomcategory'
);
$the_query = new WP_Query( $args );
if($the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post();