it-swarm.com.de

Listet die neuesten Bild-Uploads auf, jedoch nur für einen bestimmten benutzerdefinierten Beitragstyp

Ich kann eine Liste der neuesten Bildanhänge wie folgt abrufen:

$attachments = get_posts( array(
    'post_type' => 'attachment',
    'posts_per_page' => $number,
    'post_mime_type' => 'image'
) );

Dies gibt alle Bilder zurück, die kürzlich hochgeladen wurden, unabhängig davon, ob sie an einen Beitrag oder eine Seite angehängt oder über das Medienmenü nicht angehängt wurden.

Ich möchte diese Liste nur auf Bilder beschränken, die an einen benutzerdefinierten Beitragstyp angehängt sind, den ich erstellt habe. (Der benutzerdefinierte Beitragstyp ist nicht so wichtig. Dieselbe Frage könnte lauten: "Nur an Beiträge angehängte Bilder" oder "Nur an Seiten angehängte Bilder".)

Ich erkenne, dass ich jedes Bild nach dem Ausführen der obigen Abfrage testen und alle Bilder entfernen kann, deren Eltern nicht der richtige Beitragstyp sind, aber ich möchte eine bestimmte Anzahl von Bildern ($number) zurückgeben. Mit dieser Methode können einige oder alle zurückgegebenen Bilder entfernt werden !

5
Doug

Haben Sie versucht, get_posts einen Filter hinzuzufügen? Dies ist nicht getestet, nur ein Gedanke nach ein bisschen Suchen:

 function my_filter( $query )
 {
      if( is_home() ) //Example, if u want to display recent images on home
      {
           $query->set( 'post_type', array( 'attachment', 'my_cpt' ) );
      }
 }
 add_filter( 'pre_get_posts', 'my_filter' );

BEARBEITEN: Nach dem erneuten Lesen wird wahrscheinlich nicht das erreicht, was Sie versuchen, sondern sowohl Anhänge als auch Posts Ihres CPT angezeigt.

Ich schätze, ich lasse es hier, falls es dir irgendwelche Ideen gibt.

BEARBEITEN 2: Die einzige andere Möglichkeit, die ich außer dem Filtern in PHP vorstellen kann, wäre eine benutzerdefinierte SQL-Abfrage und das anschließende Einrichten der Post-Daten. EX :

$sql = "SELECT * FROM wp_posts
        WHERE post_type = 'attachment'
        AND post_parent IN (SELECT ID FROM wp_posts WHERE post_type = 'your-cpt')
        //ORDER BY";

 $posts = $wpdb->get_results( $sql, OBJECT );

 //loop - setup_postdata

Weitere Infos: Wordpress Codex

1
Shane

Zuerst erhalten Sie nur die zuletzt geänderten Beiträge für Ihr CPT. Dann holen Sie sich ihre Anhänge. Natürlich können Sie eine gewisse Logik haben, um die Anzahl der Anhänge zu begrenzen.

$mycpt = get_posts(array(
                 'post_type'=>'mycpt',
                  'posts_per_page'=>-1,
                  'orderby'=>'modified'
                 ));

$attachments = array();
foreach($mycpt as $mycpt)
{
  $post_attachements = get_posts( array(
    'post_parent'       => $mycpt->ID,
    'post_type'         => 'attachment',
    'post_mime_type'    => 'image',   
    'posts_per_page'    => -1
) );
   foreach($post_attachements as $post_attachements){
     $attachments[] = $post_attachements;
    }

}
1
Rajeev Vyas