关于你发布的代码,我想说一些事情:
您可以避免使用6种不同的操作,因为一种就足够了:\'save_post\'
每次创建或更新帖子时都会触发$post
: \'save_post\'
将传递post id,您可以使用它。此外,准备函数以接收参数将帮助您以编程方式运行相同的函数。代码的编辑版本将变为:
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\' );
现在,对于旧帖子,您唯一需要的就是通过查询检索它们,然后为每个帖子运行相同的函数。
只需注意只执行一次任务:这是一个非常重要的时间&;消耗资源的任务,因此应该只运行一次,可能在后端运行。
我会用transient 目的:
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 );
});
将此代码添加到
functions.php
或者到插件,登录后端,准备等待几秒钟,然后仪表板才会出现,但在那之后,所有帖子都应该有缩略图,至少每个上传了图像的帖子都应该有缩略图。
如果一切正常,您可以删除最后一个代码段,只保留第一个。
注意我的代码需要php 5.3+