星期一 , 14 4 月 2025

wp如果字段数据是json如何存储字段为json数组

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;
}