Schließen Sie Bilder von “in Post eingefügt” aus, wenn Sie versuchen, Anhänge zu erhalten

Ich habe hier den Münzschieber, der alle Bilder aus der Galerie aufnimmt. Ich erhalte die Anhänge durch den folgenden Code:

$attachments = get_posts(array('post_type' => 'attachment', 'post_parent' => $post->ID)); 

Aber diese function gibt mir auch Bilder, die inline auf einer Seite gepostet wurden. Wenn ich zum Artikelbild schaue, kann ich das Bild in der Vorsprunggalerie sehen. Das Bild wird auch im Editor angezeigt.

Wie kann ich Bilder ausschließen, die in den Editor eingefügt wurden?

Ich habe gesehen, dass es eine exclude für get_posts , aber weder get_the_post_thumbnail(); noch get_post_thumbnail_id(); funktioniert für mich. Das Bild ist immer noch im Slider und im Post enthalten.

Bearbeiten:

Es scheint, dass es unmöglich ist, ein Bild in einen Beitrag zu stellen, ohne es in die Galerie zu stellen. Wenn es in der Galerie ist, ist es auch das Ergebnis von get_posts . Jetzt habe ich eine Datei per FTP auf den Webserver hochgeladen und das Bild mittels einer URL platziert. Jetzt scheint es zu funktionieren, aber es ist keine akzeptable Lösung …

Solutions Collecting From Web of "Schließen Sie Bilder von “in Post eingefügt” aus, wenn Sie versuchen, Anhänge zu erhalten"

Ich hatte vor einiger Zeit ein ähnliches Problem und habe geholfen, es hier zu beantworten. Ich hatte zu der Zeit noch keinen Account und kann den ursprünglichen Post nicht finden, sonst würde ich ihn verlinken. Wenn ich mich recht entsinne, hat mir Jan Fabry so ziemlich Marschbefehle erteilt und ich habe etwas ausgehackt. Ich weiß nicht genau, wie Sie dem Münzregler Bilder zuführen. Ich kann mir vorstellen, dass Sie Ihre get_posts-Ergebnisse durchblättern und Bilder nacheinander ausspucken. Wie auch immer, hier ist ein Code. Ziemlich hässlich, aber es funktioniert.

Als Erstes verwenden Sie den Hook “wp_insert_post”, um jedem Bild, das in den Post-Inhalt eingefügt wird, einen eindeutigen Meta-Wert hinzuzufügen.

 add_action('wp_insert_post', 'insertedImage_save_meta'); function insertedImage_save_meta($post_id) { $upPost = get_post($post_id); $rawPostDoc = new DOMDocument(); @$rawPostDoc->loadHTML($upPost->post_content); $imgs = $rawPostDoc->getElementsByTagName('img'); foreach($imgs as $img){ $imgIDStr = substr($img->getAttribute('class'), (stripos($img->getAttribute('class'),'wp-image-')+9), 8); $imgID = preg_replace("[^0-9]", '', $imgIDStr); if($imgID !== false && $imgID !== '') { // double falsy check because of specific nature of stripos() returns coupled with the preg_replace return. Not sure if this is necessary. if(get_post_meta($imgID, '_inserted-image', true) === '') update_post_meta($imgID, '_inserted-image', 'yes'); } } } 

Dann würden Sie für Ihre Anzeige, wenn Sie Ihre Bildobjekte durchlaufen, mit einem Aufruf von get_post_meta () nach diesem eindeutigen Meta suchen und es versäumen, HTML auszugeben, wenn Sie es finden.

Wenn ich meine get_posts-Ergebnisse mit foreach ($ images as $ image) durchforste, würde ich Folgendes tun:

 if ( get_post_meta( $image->ID, '_inserted-image', true ) === 'yes' ) continue; 

BESCHRÄNKUNGEN: Dadurch wird der zugewiesene Metawert aus Bildern nicht entfernt, wenn das eingefügte Bild später aus dem Post-Inhalt entfernt wird, aber in der Galerie des Posts verbleibt. Aber die function könnte ziemlich einfach erweitert werden, um gegen alle angehängten Bilder des Posts zu prüfen und das Meta-Tag zu entfernen, wenn ein Bild nicht im Body-Inhalt gefunden wird.