【问题标题】:import bulk images to wordpress将批量图像导入 wordpress
【发布时间】:2015-01-21 10:44:48
【问题描述】:

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

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

我找到了“从服务器添加”插件,但该插件仅限于手动选择图像,但是当我一次选择多个图像时,它会崩溃。

还有其他解决方案吗?

【问题讨论】:

  • 我写了我试过这个插件,它不适用于许多目录和文件,需要一一选择
  • 您从哪个平台迁移到 wordpress
  • 这是一个用原生 php 编写的网站,拥有自己的 cms
  • 你浏览过数据库吗?首先检查旧网站的图像存储过程然后制作sql脚本以在$wpdb->postmeta中使用post_id迁移他们的路径,因为wordpress将图像保存在postmeta表中并使用post_id。
  • @nishant WordPress 将图像(不是物理图像,而是与其关联的关系数据)存储在wp_postswp_postmeta 表中。

标签: php wordpress


【解决方案1】:

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

【讨论】:

  • 这将进入你的主题的functions.php文件。但我强烈建议您不要在实际站点上执行此操作,除非您在更安全的环境中对其进行了测试。至少,首先备份您的网站。这将遍历您的上传目录并为它找到的每个文件创建一个附件。
  • 毕竟那些假冒的复制 wordpress 网站,所以仍然保留解决方案。希望我先来这里。
【解决方案2】:

当我在迁移一个包含超过 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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2014-02-03
    相关资源
    最近更新 更多