Erhalte Anhänge für alle Beiträge eines bestimmten Beitragstyps

Ich mache ein Widget, das eine Reihe von Bildern aus den letzten benutzerdefinierten Posts anzeigt. Ich möchte die folgende Abfrage ausführen:

SELECT p.* FROM wp_posts p WHERE post_type='attachment' AND post_mime_type LIKE 'image%' AND post_parent IN ( SELECT ID FROM wp_posts WHERE post_type ='my_custom_post_type' ) ORDER BY post_date DESC LIMIT 10; 

und ein Array von Anhangsobjekten erhalten. Ich bin unklar über die kanonische WordPress-Methode, um so etwas zu tun. Wo soll ich anfangen?

Solutions Collecting From Web of "Erhalte Anhänge für alle Beiträge eines bestimmten Beitragstyps"

Es scheint ein bisschen eine Verschwendung zu sein, zwei Schleifen zu durchlaufen, nur um einige eingebaute API-functionen zu verwenden, die nicht für einen solchen Anwendungsfall ausgelegt sind.

Ich denke, dass Sie besser Ihr SQL kombiniert mit der wpdb class verwenden sollten – schneller und sauberer.

Beispiel (mit modifiziertem SQL):

 < ?php function wpse52315_get_attach() { global $wpdb; $res = $wpdb->get_results("select p1.* FROM {$wpdb->posts} p1, {$wpdb->posts} p2 WHERE p1.post_parent = p2.ID AND p1.post_mime_type LIKE 'image%' AND p2.post_type = 'your_cpt' ORDER BY p2.post_date LIMIT 10;" ); return $res; } 

Was ich empfehle, ist eine Instanz von WP_Query für das Durchlaufen aller WP_Query des benutzerdefinierten Post-Typs und dann get_posts() , um die Anhänge für jeden Post abzurufen. Hier ist ein nicht getesteter Code-Snippet, der tun sollte, was Sie wollen:

 // Setup array for storing objects $my_attachment_objects = array(); // Arguments for custom WP_Query loop $my_cpts_args = array( 'post_type' => 'my_custom_post_type', 'posts_per_page' => 10 ); // Make the new instance of the WP_Query class $my_cpts = new WP_Query( $my_cpts_args ); // And Loop! if( $my_cpts->have_posts() ) : while( $my_cpts->have_posts() ) : $my_cpts->the_post(); // arguments for get_posts $attachment_args = array( 'post_type' => 'attachment', 'post_mime_type' => 'image', 'post_status' => null, // attachments don't have statuses 'post_parent' => $post->ID ); // get the posts $this_posts_attachments = get_posts( $attachment_args ); // append those posts onto the array $my_attachment_objects[$post->ID] = $this_posts_attachments; // make an array with the post_id as the key, just in case that's useful endwhile; endif; wp_reset_postdata(); 

Hoffe das hilft.

Vielleicht in etwa so:

 < ?php $args = array( 'post_type' => 'portfolio', 'posts_per_page' => 10 ); $loop = new WP_Query( array ( 'orderby' => 'title', 'order' => 'DESC' ) ); while ( $loop->have_posts() ) : $loop->the_post(); the_title(); echo '
'; the_content(); echo '
'; endwhile; ?>

Wenn Sie nur an der Anzahl der Anhänge für einen bestimmten Beitragstyp interessiert sind, können Sie die function von Chris leicht wie folgt ändern:

 < ?php function myprefix_image_count() { global $wpdb; $res = $wpdb->get_var("select COUNT(*) FROM {$wpdb->posts} p1, {$wpdb->posts} p2 WHERE p1.post_parent = p2.ID AND p1.post_mime_type LIKE 'image%' AND p2.post_type = 'your_cpt_name' ORDER BY p2.post_date;" ); $imageCount = (int)$res; return $imageCount; } ?>