Programmgesteuertes Festlegen des ersten Bilds als Featured

Ich habe über 400 Posts mit Bildern darin, ich habe eine neue Vorlage, die ein vorgestellten Bild für jeden Beitrag erfordert, etwas, das meine letzte Vorlage nicht benötigt … Ich frage mich, ob es ein Skript gibt, das ich meinen functionen hinzufügen kann. php in der Lage sein, das erste Bild in jedem Beitrag zu packen und es als das Feature festlegen … Bisher habe ich das gefunden, aber es funktioniert nicht …

function auto_set_featured() { global $post; $has_thumb = has_post_thumbnail($post->ID); if (!$has_thumb) { $attached_image = get_children( "post_parent=$post->ID&post_type=attachment&post_mime_type=image&numberposts=1" ); if ($attached_image) { foreach ($attached_image as $attachment_id => $attachment) { set_post_thumbnail($post->ID, $attachment_id); } } } } add_action('the_post', 'auto_set_featured'); add_action('save_post', 'auto_set_featured'); add_action('draft_to_publish', 'auto_set_featured'); add_action('new_to_publish', 'auto_set_featured'); add_action('pending_to_publish', 'auto_set_featured'); add_action('future_to_publish', 'auto_set_featured'); 

Dieses Skript wird für neue Beiträge funktionieren, aber ich brauche es, um alle meine älteren Beiträge, irgendwelche Vorschläge zu beeinflussen?

Solutions Collecting From Web of "Programmgesteuertes Festlegen des ersten Bilds als Featured"

Verwenden Sie diesen Code in Ihrer untergeordneten Themenfunktionsdatei und generieren Sie Miniaturansichten neu

 function wpsites_auto_set_featured_image() { global $post; $featured_image_exists = has_post_thumbnail($post->ID); if (!$featured_image_exists) { $attached_image = get_children( "post_parent=$post->ID&post_type=attachment&post_mime_type=image&numberposts=1" ); if ($attached_image) { foreach ($attached_image as $attachment_id => $attachment) { set_post_thumbnail($post->ID, $attachment_id); } } } } add_action('the_post', 'wpsites_auto_set_featured_image'); 

In Bezug auf den Code, den du gepostet hast, würde ich einige Dinge sagen:

  • Sie können die Verwendung von 6 verschiedenen Aktionen vermeiden, da eine ausreicht: 'save_post' wird jedes Mal ausgetriggers, wenn ein Post erstellt oder aktualisiert wird
  • Sie können 'save_post' $post : 'save_post' wird die Post-ID übergeben, können Sie es verwenden, aber die Vorbereitung der function, um ein Argument zu erhalten, wird Ihnen helfen, die gleiche function programmgesteuert auszuführen

Die bearbeitete Version Ihres Codes wird:

 function auto_set_featured( $post = NULL ) { // retrieve post object $post = get_post( $post ); // nothing to do if no post, or post already has thumbnail if ( ! $post instanceof WP_Post || has_post_thumbnail( $post->ID ) ) return; // prepare $thumbnail var $thumbnail = NULL; // retrieve all the images uploaded to the post $images = get_posts( array( 'post_parent' => $post->ID, 'post_type' => 'attachment', 'post_status' => 'inherit', 'post_mime_type' => 'image', 'posts_per_page' => 1 ) ); // if we got some images, save the first in $thumbnail var if ( is_array( $images ) && ! empty( $images ) ) $thumbnail = reset( $images ); // if $thumbnail var is valid, set as featured for the post if ( $thumbnail instanceof WP_Post ) set_post_thumbnail( $post->ID, $thumbnail->ID ); } add_action( 'save_post', 'auto_set_featured' ); 

Das einzige, was Sie für alte Posts benötigen, ist, sie mit einer Abfrage abzurufen und dann die gleiche function für jeden Post auszuführen.

Achte nur darauf, die Aufgabe nur einmal auszuführen: Es ist eine sehr zeit- und ressourcenintensive Aufgabe, daher sollte sie nur einmal ausgeführt werden, möglicherweise im Backend.

Ich werde einen Transienten für den Zweck verwenden:

 add_action( 'admin_init', function() { if ( (int) get_transient(' bulk_auto_set_featured' ) > 0 ) return; $posts = get_posts( 'posts_per_page=-1' ) ; if ( empty( $posts ) ) return; array_walk( $posts, 'auto_set_featured' ); set_transient( 'bulk_auto_set_featured', 1 ); }); 

Nachdem Sie diesen Code zu Ihrer functions.php oder zu einem Plugin hinzugefügt haben, melden Sie sich im Backend an und bereiten Sie sich darauf vor, einige Sekunden zu warten, bevor das Dashboard erscheint. Danach sollte jeder Post ein Thumbnail haben, zumindest jeden Post, der ein Bild hochgeladen hat drin.

Wenn alles so läuft, wie es sollte, können Sie das letzte Code-Snippet entfernen, indem Sie nur das erste behalten.

Beachten Sie, dass mein Code php 5.3+ erfordert