我有一个用于大量帖子的自定义字段,其中包含youtube视频的url。我曾经从视频中抓取ID并用它来构建拇指,但在新版本中,我实际上使用download\\u url()从youtube自定义构建的拇指图像url,并将其下载到我的服务器。因此,我必须对数据库中的所有帖子执行此操作,但需要一种方法,而不是手动处理每个帖子。
因此,我为每个帖子都有一个自定义字段video_code
等于视频的url。
因此,我需要对特定post\\u类型的所有帖子执行类似操作。。
require_once(ABSPATH . "wp-admin" . \'/includes/image.php\');
require_once(ABSPATH . "wp-admin" . \'/includes/file.php\');
require_once(ABSPATH . "wp-admin" . \'/includes/media.php\');
$video_code = get_post_meta($post->ID,\'video_code\',true);
$video_id = getVideoId($video_code); // getVideoId is a custom function
if ($video_id) {
$video_image_url = \'http://img.youtube.com/vi/\'.$video_id.\'/hqdefault.jpg\';
ut$tmp = download_url($video_image_url);
$file_array = array(
\'name\' => basename( $video_image_url ),
\'tmp_name\' => $tmp
);
}
$vid_thumb = media_handle_sideload( $file_array, $post_id );
update_post_meta($post_id,\'video_thumb\',$vid_thumb);
有什么想法吗?
最合适的回答,由SO网友:developdaly 整理而成
这将点燃init
所以你只需要刷新一次页面就可以了。我遗漏了$new_value
-- 你需要定义一下。
<?php
add_action( \'init\', \'wpse_75308_update_video_meta\' );
function wpse_75308_update_video_meta() {
// Get all posts
$posts = get_posts( array( \'numberposts\' => -1 );
// Loop through each and update the custom field where it exists
foreach( $posts as $post ) {
update_post_meta( $post-ID, \'video_thumb\', $new_value );
}
}