如何在发布前使用API替换发布图片的url?

时间:2012-01-11 作者:Yuriy Petrovskiy

我目前正在编写phpNuke import-Wrdpress插件。我在导入带有图像的帖子时遇到问题:+我已经编写了一个例程,可以从源帖子HTML中提取图像标记文本和图像-我需要replace img 带有导入wordpress媒体库的标签。

示例:

phpNuke帖子内容:

 ...bla bla... 
 <img src="http://external.site.com/images/image321.jpg"> 
 bla bla...
应翻译成以下内容:

 ...bla bla... 
 <img src="http://mysite.com/wp-content/uploads/506_large-127x130.jpg"> 
 bla bla...
我找到了一个wordpress函数media_sideload_image 它根据描述将图像从给定的URL导入到库中,并将其附加到具有给定id的帖子中。。。但是到replace 带有新的图像标签我需要:

插入带有wp_insert_post 并保存帖子id使用media_sideload_image 导入和接收图像标签提取src 属性来自img 标记替换src 在post html中,使用更新postwp_update_post

My questions are:

有没有什么方法可以更直接地将图像添加到Wordpress帖子中?(无重复张贴)

  • 是否必须将图像链接到帖子
  • 1 个回复
    最合适的回答,由SO网友:Brian Fegter 整理而成

    我的第一个建议是,如果可能的话,从phpNuke输出一个WXR格式的文件。我对它不熟悉,但我很肯定它在任何具有数据库访问的平台上都是可能的。如果您不熟悉WXR,请安装一个沙盒WP环境,创建一些帖子,对它们进行分类,创建并分配父页面,上载图像附件,然后在“工具”->“导出”下创建导出。此文件将为您提供使用标准Wordpress导入器插件所需的所有语法。

    如果这不是一个选项,我将使用您创建的方法导入所有帖子,然后构建一个函数来分别迁移图像。依我拙见,这将有助于更清洁的操作。

    对于清理脚本,我只需基于media\\u sideload\\u image构建自己的函数,因为它不会返回所需的附件ID。

    function foo_import_image($url, $post_id, $desc, $set_as_featured = true){
    
        $tmp = download_url($url);
        preg_match(\'/[^\\?]+\\.(jpg|JPG|jpe|JPE|jpeg|JPEG|gif|GIF|png|PNG)/\', $url, $matches);
        $file_array[\'name\'] = basename($matches[0]);
        $file_array[\'tmp_name\'] = $tmp;
    
        if ( is_wp_error( $tmp ) ) {
            @unlink($file_array[\'tmp_name\']);
            $file_array[\'tmp_name\'] = \'\';
        }
    
        $id = media_handle_sideload( $file_array, $post_id, $desc );
    
        if($set_as_featured)
            update_post_meta($post_id, \'_post_thumbnail\', $id);
    
        return $id;
    }
    
    下面是我将如何实现前面的函数:

    //do a query to get the post_content fields
    //use_preg_match all to identify if the content contains an image
    
    $old_url = \'http://foo.com/images/bar.jpg\'; //this would be matched content
    $description = \'Foo Bar Image\';
    $id = foo_import_image($old_url, $post_id, $description, false);
    $new_url = wp_get_attachment_url($id)
    
    global $wpdb;
    $wpdb->query("UPDATE $wpdb->posts SET post_content = replace(post_content, \'$old_url\', \'$new_url\') WHERE ID = \'$post_id\' LIMIT 1");
    
    我的最后一个建议是创建一个单独的开发环境来测试这一点,以免弄乱一个好的导入批处理。每当我执行这种类型的操作时,在开始将大量图像导入DB之前,我都会进行一次完整的DB转储。

    结束

    相关推荐

    Resizing images failing

    我最近添加了三种新尺寸的post\\u缩略图的主题支持,我想调整之前上传的所有旧图像的大小。我自己写的剧本如下:function resizeImages() { require ( ABSPATH . \'wp-admin/includes/image.php\' ); global $wpdb; $images = $wpdb->get_results( \"SELECT ID FROM $wpdb->posts