Extrahiere das Bild aus dem Inhalt und setze es als das vorgestellte Bild

Das Problem:
Ich poste von der WordPress iPhone App. Beim Hinzufügen eines Bildes erscheint das Bild in der Beschreibung selbst, was ich nicht mag.

Was ich versuche zu tun:
Entfernen Sie das Bild aus der Beschreibung und führen Sie einen der folgenden Schritte aus (kennen Sie nicht die Vorteile einer Option gegenüber der anderen):

  1. Rufen Sie die Bildquelle aus dem entfernten Bild ab und fügen Sie sie einem benutzerdefinierten Feld hinzu. -ODER-
  2. Legen Sie das Bild als das vorgestellte Bild fest

Ich denke, dass eine dieser Optionen mir helfen würde, die Bild-URL für die Verwendung in meinen Post-Vorlagen zu isolieren.

Was ich versucht habe:
Buchstäblich alles unter der Sonne. Im Moment füge ich der functions.php Code hinzu, möchte aber irgendwann ein Plugin erstellen.

Ich denke, der Code unten ist weit weg, aber ich möchte ihn veröffentlichen, um einige der Versuche zu zeigen, die ich gemacht habe:

Ich habe eine Aktion hinzugefügt, um eine function mpb_remove_post_image auf content_save_pre auszuführen …

add_action('content_save_pre', 'mpb_remove_post_image'); 

Das Problem ist, dass ich keinen Zugriff auf die Post-ID habe (was ich brauche, um das vorgestellte Bild zu setzen) mit content_save_pre, also muss ich die Bild-URL holen und nach einem Beitrag mit der GUID suchen, der dem Bild src entspricht. .

 function mpb_remove_post_image( $content ){ // strip slashes, I guess we need to readd slashes when we're done? $content = stripslashes($content); // get the first image src $image_src = get_first_image($content); // if there's an image src we can jam if(!is_null($image_src)){ global $wpdb; // query the db for an attachment with this image //$thumb_id = $wpdb->get_var($wpdb->prepare("SELECT DISTINCT ID FROM $wpdb->posts WHERE guid='$image_src'")); $result = $wpdb->get_results("SELECT ID, post_parent FROM {$wpdb->posts} WHERE guid ='$image_src'"); $thumb_id = $result[0]->ID; $post_id = $result[0]->post_parent; // set the featured image mpb_set_featured_image($thumb_id,$post_id); // update_post_meta( $post_id, '_thumbnail_id', $thumb_id ); } // remove any images in the content $content = preg_replace("/]+\>/i", "", $content); $content = addslashes($content); return $content; } 

Der obige Code verweist auf diese function, die ich geschrieben habe, um das Bild zu erhalten …

 function get_first_image($html){ require_once('simple_html_dom.php'); $post_dom = str_get_dom($html); // get the first image $first_img = $post_dom->find('img', 0); // if any images then return the src attribute if($first_img !== null) { return $first_img->src; } return null; } 

Und um das vorgestellte Bild zu setzen …

 // set the featured image function mpb_set_featured_image( $thumb_id, $post_id ){ update_post_meta( $post_id, '_thumbnail_id', $thumb_id ); } 

Ich habe auch versucht, eine Aktion für save_post hinzuzufügen, aber alles, was ich innerhalb der laufenden function mache, scheint einen anderen Haken auszulösen, der save_post erneut ausführt, so dass es zu einer Endlosschleife wird.

Weiß jemand (auch wenn es auf hohem Niveau ist), welche Schritte ich unternehmen kann, um dies zu erreichen? Um zu wiederholen, was ich machen möchte …

Beim Einfügen eines Posts 1) Holen Sie das erste Bild src 2) Legen Sie es als ein benutzerdefiniertes Feld oder legen Sie es als ein vorgestellten Bild 3) Entfernen Sie das Bild aus dem Post.

edit – Ich sollte erwähnen, dass der Code, den ich gepostet habe, funktioniert, wenn du den Post über den wp admin hinzufügst. Aber nicht, wenn Sie es über die mobile App hinzufügen.

Solutions Collecting From Web of "Extrahiere das Bild aus dem Inhalt und setze es als das vorgestellte Bild"

Warum nicht zwei Haken verwenden, einen vor dem Speichern und einen nach dem Speichern?

content_save_pre: function, die mit diesem Hook verbunden ist, entfernt das Bild aus dem Inhalt und speichert es in Session / Transient .

save_post: Mit diesem Hook hast du ID von Post. Die mit diesem Hook verknüpfte function stellt das vorgestellte Bild für den Post mit dieser ID ein und löscht Sitzungs- / Übergangsdaten .

Alternativ, wenn Sie mit Ihrem Ansatz gehen, denke ich, sollten Sie post_name anstelle von guid , um Post-ID aus der database abrufen.

Ich bin mir nicht sicher, ob es in Ihrem speziellen Szenario verwendet wird, aber es lohnt sich, das get_the_image-Plugin zu testen

http://wordpress.org/extend/plugins/get-the-image/

Es prüft mehrere Quellen, um zu versuchen, ein Bild zur Anzeige zu finden – gemäß den FAQ:

Wie zieht es Bilder?

  • Sucht nach einem Bild nach benutzerdefiniertem Feld (eines Ihrer Wahl).
  • Wenn kein Bild vom benutzerdefinierten Feld hinzugefügt wird, prüfen Sie mithilfe von the_post_thumbnail () (WP 2.9, neues Bild-Feature), ob ein Bild vorhanden ist.
  • Wenn kein Bild gefunden wird, wird ein Bild an Ihren Post angehängt.
  • Wenn kein Bild angehängt ist, kann es ein Bild aus Ihrem Post-Inhalt extrahieren (standardmäßig deaktiviert).
  • Wenn zu diesem Zeitpunkt kein Bild gefunden wird, wird standardmäßig ein von Ihnen festgelegtes Bild angezeigt (nicht standardmäßig eingestellt).