我正在将一个非常大的网站迁移到wordpress。 我有大约35,000张图片,我需要从本机php制作的自定义cms迁移到wordpress环境。
我已经通过ftp将文件上传到wp-content
目录,但wordpress媒体似乎无法识别它,因为它缺少mysql数据库中的元数据。
我发现"从服务器添加"插件,但该插件仅限于手动选择图像,但当我一次选择多个图像时,它会崩溃。
那里还有其他解决方案吗?
答案 0 :(得分:4)
将RecursiveDirectoryIterator与RecursiveIteratorIterator结合使用。然后使用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));