function batch_update_all_videos() {
$video_posts = get_posts(array(
'post_type' => 'post',
'numberposts' => -1,
'category_name' => 'company-video,user-video' // comma = OR
));
if (empty($video_posts)) {
echo '没有找到任何 videos 文章。';
return;
}
//collect all the videos for each other
$product_videos = array();
foreach ($video_posts as $video) {
$video_id = $video->ID;
echo "处理 video 文章 ID: $video_id <br>";
$video_wid = get_post_meta($video_id, 'csv_wid', true);
if (!$video_wid) {
echo "Video ID: $video_id 没有 $video_wid 字段,跳过。<br>";
continue;
}
$video_json = get_post_meta($video_id, 'csv_field', true);
if (!$video_json) {
echo "Video ID: $video_id 没有video文件,跳过。<br>";
continue;
}
// Decode the JSON string to PHP array/object
$video_data = json_decode($video_json, true);
if (!$video_data) {
echo "Video ID: $video_id JSON格式错误,跳过。<br>";
continue;
}
$product_ids = explode(',', $video_wid);
$product_ids = array_map('trim', $product_ids);
// For each product ID, add this video to its collection
foreach ($product_ids as $csv_id) {
if (!isset($product_videos[$csv_id])) {
$product_videos[$csv_id] = array();
}
// Add this video data to the product's collection
$product_videos[$csv_id][] = $video_data;
}
}
// Now update each product with its collected videos
$count = 0;
foreach ($product_videos as $csv_id => $videos) {
// Find products with this csv_id
$args = array(
'post_type' => 'product',
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => 'csv_id',
'value' => $csv_id,
'compare' => '=',
),
),
'fields' => 'ids', // 只获取ID提升性能
);
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$product_id = get_the_ID();
// Store as JSON array whether one or multiple videos
$videos_json = json_encode($videos);
update_post_meta($product_id, 'product_select_videos', $videos_json);
echo "更新 product ID: $product_id (csv_id: $csv_id) 的videos,共 " . count($videos) . " 个视频。<br>";
$count++;
}
}
wp_reset_postdata();
}
echo '所有 videos 文章处理完毕!';
echo $count;
}