从WooCommerce产品导入下载附件

时间:2018-04-06 作者:Aliiiiiiii

我正在从wordpress/woocommerce网站进行迁移,我已经成功导出/导入了所有数据,除了一件事:从我的woocommerce产品下载附件文件

我使用的是wp cli,对于普通媒体来说效果很好(我的所有页面和博客文章都有媒体文件),但我的所有woocommerce文件都上载到wp content/uploads/year/month文件夹中,而不是:/wp content/uploads/woocommerce\\u uploads/year/month文件夹中

我在XML中查看了路径是否正确

有人知道wordpress是如何决定在导入期间将文件放在哪个目录中的吗?如何将我的woocommerce下载产品上传到正确的目录中?

编辑:从wp 4.8.6导出(&;wc 3.2.1导入wp 4.9.5和;wc 3.3.4

1 个回复
SO网友:Aliiiiiiii

以下是我找到的解决方案:在wordpress导入器插件函数process\\u帖子中:

// try to use _wp_attached file for upload folder placement to ensure the same location as the export site
// e.g. location is 2003/05/image.jpg but the attachment post_date is 2010/09, see media_handle_upload()
$postdata[\'upload_date\'] = $post[\'post_date\'];
if ( isset( $post[\'postmeta\'] ) ) {
    foreach( $post[\'postmeta\'] as $meta ) {
        if ( $meta[\'key\'] == \'_wp_attached_file\' ) {
            if ( preg_match( \'%^[0-9]{4}/[0-9]{2}%\', $meta[\'value\'], $matches) )
            {
                $postdata[\'upload_date\'] = $matches[0];
                $postdata[\'woocommerce\'] = false;
            }
            else if ( preg_match( \'%^(woocommerce_uploads)/([0-9]{4}/[0-9]{2})%\', $meta[\'value\'], $matches ) ) {
                $postdata[\'upload_date\'] = $matches[2];
                $postdata[\'woocommerce\'] = true;
            }
            break;
        }
    }
}
(这是wordpress尝试使用目录名称获取上载日期的部分-使用woocommerce\\u uploads结构将失败)

在wordpress导入器插件函数fetch\\u remote\\u文件中:

function fetch_remote_file( $url, $post ) {
        // extract the file name and extension from the url
        $file_name = basename( $url );

        global $wp_filter;
        if ( isset($wp_filter[\'pre_option_upload_path\']) ) {
            remove_filter( \'pre_option_upload_path\', \'woocommerce_path_upload\' );
        }       

        if ( $post[\'woocommerce\'] == true ) {
            add_filter( \'pre_option_upload_path\', \'woocommerce_path_upload\' );
        }

        $upload = wp_upload_bits( $file_name, 0, \'\', $post[\'upload_date\'] );
(这是上传文件之前的部分,如果是woocommerce文件,我们会在上传路径之前添加一个路径)

function woocommerce_path_upload () { return \'wp-content/uploads/woocommerce_uploads\'; }
(函数在过滤器中使用以更正路径)

最后,在wordpress核心中,wp包括/功能。php将$refresh\\u cache设置为true(默认值为false):

function wp_upload_dir( $time = null, $create_dir = true, $refresh_cache = true ) {
(如果你不修改wordpress,请将上传路径保存在缓存中,并且在我们的情况下不检查每个文件,我们需要每次都检查它)

请注意,这是您仅在迁移期间进行的修改,之后将其反转

结束

相关推荐

是否可以在打开wp.media弹出窗口时隐藏媒体详细信息侧边栏?

让我们切入正题:popup = wp.media({ frame: \'post\', state: \'insert\', library: { type: [ \'image\' ] }, multiple: false }); 打开wp时,我使用了一系列参数。上方的媒体弹出窗口。它工作得很好,但我想隐藏弹出窗口的左侧菜单(允许您选择图像插入或库插入)和右侧媒体详细信息侧栏(包含所