将批量图像导入wordpress

时间:2014-07-12 21:43:59

标签: php wordpress wordpress-plugin

我正在将一个非常大的网站迁移到wordpress。 我有大约35,000张图片,我需要从本机php制作的自定义cms迁移到wordpress环境。

我已经通过ftp将文件上传到wp-content目录,但wordpress媒体似乎无法识别它,因为它缺少mysql数据库中的元数据。

我发现"从服务器添加"插件,但该插件仅限于手动选择图像,但当我一次选择多个图像时,它会崩溃。

那里还有其他解决方案吗?

2 个答案:

答案 0 :(得分:4)

RecursiveDirectoryIteratorRecursiveIteratorIterator结合使用。然后使用wp_insert_attachment将它们添加到WordPress数据库。

注意:我无法对此进行测试,但这是一般概念。

// Get WP uploads dir
$wp_upload_dir = wp_upload_dir();

// Init recursive Obj
$di = new RecursiveDirectoryIterator($wp_upload_dir['path']);
foreach (new RecursiveIteratorIterator($di) as $filename => $file) {
    // get filetype for attachment meta
    $filetype = wp_check_filetype( $file->getPathname(), null );
    // attachment meta
    $attachment = array(
        'guid'           => $wp_upload_dir['url'] . '/' . $filename, 
        'post_mime_type' => $filetype['type'],
        'post_title'     => preg_replace( '/\.[^.]+$/', '', $filename ),
        'post_content'   => '',
        'post_status'    => 'inherit'
    );

    // Insert the attachment.
    $attach_id = wp_insert_attachment( $attachment, $filename );
}

答案 1 :(得分:0)

当我使用图像迁移包含超过55345篇文章的网站时,我编写了一些执行迁移的纯PHP脚本,然后按如下方式插入图像(基于explanation given by jackreichert):

$uploads = wp_upload_dir();
$save_path = $uploads['basedir'].'/importecms/'.$new_filename;

$attach_id = wp_insert_attachment( $artdata, $save_path, $post_id );

if ($attach_data = wp_generate_attachment_metadata( $attach_id, $save_path)) {
    wp_update_attachment_metadata($attach_id, $attach_data);
}

$rows_affected = $wpdb->insert($wpdb->prefix.'postmeta', array('post_id' => $post_id, 'meta_key' => '_thumbnail_id', 'meta_value' => $attach_id));