Wie kann ich WP_Query verwenden, um nur 1 Beitrag vom benutzerdefinierten Beitragstyp anzuzeigen, wenn Abfrage Posts mit übereinstimmender ID im benutzerdefinierten Feld zurückgibt

Ich habe hoch und niedrig nach einer Lösung gesucht und konnte nichts finden; Hoffentlich kann jemand hier, der besser qualifiziert ist als ich, eine Hand reichen.

Ich habe zwei Testimonial-Videos (von einem benutzerdefinierten Video-Post-Typ), die bei jedem Laden der Seite zufällig angezeigt werden. Es gibt verschiedene Kunden mit Testimonials und in einigen Fällen gibt es mehrere Testimonials desselben Kunden.

Ich habe die Abfrage funktioniert, die zwei Videos aus dem benutzerdefinierten Beitragstyp zufällig anzeigt (während eine Kategorie vollständig ausfiltert). Was ich vermeiden möchte, ist das Laden von zwei Testimonial-Videos von demselben Client (sieht komisch aus, wenn zwei der gleichen Thumbnails angezeigt werden), aber ich bin mir nicht sicher, wie ich das machen soll. Hier der Arbeitscode, den ich bisher habe:

 'video', 'posts_per_page' => 2, 'orderby' => 'rand', 'tax_query' => array( array( 'taxonomy' => 'video_category', 'field' => 'slug', 'terms' => 'assess-core-certification', 'operator' => 'NOT IN') ) ) ); ?> have_posts() ) : $loop->the_post(); ?> 



""

Sorry, no testimonials found.

Solutions Collecting From Web of "Wie kann ich WP_Query verwenden, um nur 1 Beitrag vom benutzerdefinierten Beitragstyp anzuzeigen, wenn Abfrage Posts mit übereinstimmender ID im benutzerdefinierten Feld zurückgibt"

Es scheint so, als müssten Sie verhindern, dass zwei bestimmte VIDEOS auf dem gleichen Bildschirm angezeigt werden (Videos von demselben CLIENT werden nicht zweimal verhindert), aber wenn ich falsch liege, können Sie dies noch anpassen. Die Idee besteht darin, jeden VIDEOS-Identifikator (Name, ID, was auch immer) in ein Array zu schieben, wenn Sie ihn ausgeben, wobei Sie jedes Element auf das Array prüfen, um zu sehen, ob es bereits auf der Seite angezeigt wird. Wenn dies der Fall ist, überspringen Sie es, wenn nicht – zeigen Sie es an und fügen Sie es zur Liste hinzu, um eine erneute Anzeige zu verhindern.

Dies ist, was ich getan habe, um Betrügereien für ein zufällig angezeigtes Werbe-Plugin zu vermeiden, und hatte eine globale Variable, die Bild-IDs enthielt, die ich gegen jedes Mal nachprüfte, wenn ein Werbemittel zufällig ausgewählt wurde.

Andere Optionen umfassen die Verwendung von Meta-Abfrage (siehe WP_Query-Dokumente in Codex) und eine benutzerdefinierte SQL-Abfrage, die meiner Meinung nach sehr komplex erscheinen. Ich bin mir nicht sicher, ob WP_Query eindeutige Ergebnisse in einer Gruppe von Metadaten zurückgeben kann oder nicht.

Dein Code wurde angepasst (Ich habe diesen Code nicht getestet):

 < ?php $test_meta_list = array(); // array to hold item names that have been displayed ?> < ?php if ( $loop ) : while ( $loop->have_posts() ) : $loop->the_post(); // Get the video meta $test_meta = get_post_meta( get_the_ID(), 'video_clientCompany', true ) // If it has already been output, skip it if ( in_array($test_meta, $test_meta_list) ) continue(); // If not, add it to the list and output it else { array_push($test_meta_list, $test_meta) ?> 
< ?php the_content(); ?>
< ?php echo get_post_meta( get_the_ID(), 'video_clientName', true ) ?>
< ?php echo get_post_meta( get_the_ID(), 'video_clientCompany', true ) ?>

"< ?php echo get_post_meta( get_the_ID(), 'video_shortQuote', true ) ?>"
< ?php } endwhile; else: ?>

Huckepack von @Nick antwort. Was dies tun wird Abfrage alle Video-Beiträge in dieser Kategorie, überprüft, ob client1 == client2 und wenn client1 == client2 , zeigen Sie den Beitrag und client1 == client2 , wie viele Kunden wir zeigen. Die Schleife sollte aufhören, nachdem 2 Beiträge angezeigt wurden und abfallen.

Im Idealfall würden Sie wegen des Overheads eine SQL-Abfrage ausführen, aber ich habe nicht genug SQL-Erfahrung, also möchte ich nicht, dass ich die Abfrage für Sie xD schreibe

 < ?php $loop = new WP_Query(array( 'post_type' => 'video', 'posts_per_page' => -1, 'orderby' => 'rand', 'tax_query' => array( array( 'taxonomy' => 'video_category', 'field' => 'slug', 'terms' => 'assess-core-certification', 'operator' => 'NOT IN') ) ) ); ?> < ?php $prevClient = '' $clients = 0; if ( $loop ) : while ( $loop->have_posts() && $client < 2 ) : $loop->the_post(); $clientUpper = get_post_meta( get_the_ID(), 'video_clientName', true ); $clientLower = strtolower($client); if($prevClient != $clientLower) : $clients++; $prevClient = $clientLower; ?> 
< ?php the_content(); ?>
< ?php echo clientUpper; ?>
< ?php echo get_post_meta( get_the_ID(), 'video_clientCompany', true ) ?>

"< ?php echo get_post_meta( get_the_ID(), 'video_shortQuote', true ) ?>"
< ?php endif; endwhile; else: ?>

Sorry, no testimonials found.

< ?php endif; wp_reset_postdata();?>