Ich habe über 400 Posts mit Bildern darin. Ich habe eine neue Vorlage, die ein spezielles Bild für jeden Post erfordert, etwas, das meine letzte Vorlage nicht benötigt hat. Ich frage mich, ob es ein Skript gibt, das ich meinen Funktionen hinzufügen kann. PHP in der Lage zu sein, das erste Bild in jedem Beitrag zu greifen und es als die vorgestellten zu setzen ... Bisher habe ich dies 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 funktioniert für neue Beiträge, aber ich brauche es, um alle meine älteren Beiträge zu beeinflussen, irgendwelche Vorschläge?
In Bezug auf den Code, den Sie gepostet haben, würde ich einige Dinge sagen:
'save_post'
wird jedes Mal ausgelöst, wenn ein Beitrag erstellt oder aktualisiert wird$post
: 'save_post'
übergibt die Beitrags-ID. Sie können sie verwenden. Wenn Sie die Funktion für den Empfang eines Arguments vorbereiten, können Sie dieselbe Funktion programmgesteuert ausführenDie 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 für jeden Post dieselbe Funktion auszuführen.
Achten Sie einfach 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 verwende ein transient für den Zweck:
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 Ihrem functions.php
oder einem Plugin hinzugefügt haben, melden Sie sich im Backend an und warten Sie einige Sekunden, bevor das Dashboard angezeigt wird. Danach sollte jeder Beitrag ein Miniaturbild haben, zumindest jeder Beitrag, in dem ein Bild hochgeladen wurde .
Wenn alles so läuft, wie es sollte, können Sie das letzte Code-Snippet entfernen und nur das erste behalten.
Beachten Sie, dass mein Code PHP 5.3+ erfordert
Verwenden Sie diesen Code in der Funktionsdatei Ihres untergeordneten Themes und geben Sie Thumbnails neu ein
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');
" Set All First Images As Featured " hat bei mir funktioniert.
Mit einem Hack könnte es den Vorgang umkehren.
Easy Add Thumbnail kann auch den Trick machen, und die Pro-Version von Quick Featured Images macht es, und ich glaube, ich habe ein anderes Plugin gesehen, das dies macht, als ich gesucht habe.