如何批量上传图片并同时为每个图片自动创建帖子?


10

我知道如何将多个图像上传到现有帖子中,但这是另一种情况。这是针对大型资产目录的,每个自定义帖子类型的帖子代表一个图像资产(因此,每个帖子都将单个图像指定为“特色图像”)。

整个系统非常适合一次创建资产,但是非常耗时。我需要能够一次“批量”上传多个图像,然后为每个图像创建一个新帖子,然后将该图像作为“精选图像”附加到新帖子中。

每个帖子都不会输入文本内容-只是一些元数据和自定义分类分配,因此在此批创建过程中应该可以批量分配元数据和分类。

我研究了从XML-RPC后期创建(通常不处理图像上载/分配)到将文件从服务器目录拉到媒体库(不涉及后期创建)的插件的解决方案,以及对多个文件进行jquery的解决方案上传器(基本上只是将文件转储到目录中)。

我相对精通php,已经构建了插件和主题,但是我对如何处理此过程感到困惑,因为它需要第一步,以某种临时身份将文件发送到服务器,然后根据文件生成帖子上传,并为整个批次分配一些标识性元数据。

我希望可以在自定义管理面板中完成此操作,但是如果我必须在wp-admin之外执行此操作,那也很好...

有想法吗?


您是否找到了答案?这对我来说是完美的...

我做了...但是该场景演变成了该项目的整个框架插件。这不是一个简短的答案-我必须记录多个功能和钩子的流程,这些功能和钩子共同完成了这一任务。
2012年

1
总而言之,我实际上分两步进行,因为出于编辑原因,实际上没有为用户上传的所有内容生成帖子。而是,用户将所有图像上载为单个“批处理”帖子的附件。然后,检查该批处理,并接受/拒绝每个附件-实际发布了该“批处理”帖子后,自定义保存例程将接受每个接受的附件,并使用wp_insert_post()创建一个具有单个附件为特征的帖子图片。
2012年


您如何添加元数据,图像与数据如何相关?
Wyck

Answers:


5

有这个插件: 自动精选图片帖子插件

从插件页面:

每次上传图片时,自动精选图片帖子都会使用精选图片创建一个新帖子。通过插件设置页面,您可以将图像设置为发布,并将其分配给其他现有的自定义帖子类型和/或帖子格式之一。

基本上,每张上载的图像都会生成(您选择的帖子类型的)帖子,并设置为该帖子的特色图片。

我将此安装在本地计算机上。设置页面如下所示,您可以选择哪种帖子类型,包括自定义帖子类型,要将照片上传分配到的帖子类型以及想要的发布状态。

插件截图

要将插件付诸实践-导航到您选择的帖子类型,打开一个新帖子并上传媒体。

要批量上传照片,只需在“上传”对话框中突出显示多张照片。我在这里突出显示了8张照片,但是我看不出为什么它不能是80或800,除非在wordpress图片上传器中有我不知道的限制。

在此处输入图片说明

帖子标题由图像文件名设置。您应该可以使用它,并使用the_title()

我在本地测试,并且可以在Wordpress 3.6中使用。

我敢肯定,有一种更健壮或灵活的方法可以完成此操作,但是在这种情况下,该插件似乎可以完全满足您的要求,除了分配元数据外。也许其他人可以充实一点。

如果您需要动态生成的帖子内容,则至少可以从插件开始并从那里进行迭代。有人认为应该使用帖子格式或页面模板来确定帖子的显示方式。

注意:确保已image_size在functions.php中设置了所有设置。我讨厌因为忘记或更改图像大小而不得不撤消/删除10,000张照片,或者运行一个非常长的“重新生成缩略图”!


当您拒绝投票时,您应该发表评论-这对于改善网站质量会大有帮助。
timshutes

5

该脚本是一个概念证明(经过测试并且可以正常工作),它不是插件,并且旨在被黑客使用,它假定了以下几点:

  1. 它可以使用,wp_insert_post因此建议您不要将其挂钩到任何管理挂钩中,因此只需运行一次!
  2. 图像必须位于wp-content\uploads文件夹中,更改此位置将需要更多的圈来跳过。该示例使用一个\images在uploads文件夹中称为的自定义文件夹,您可以更改此部分。
  3. 它不执行任何错误检查,我仅在包含20张图像的文件夹上进行了测试,因此结果可能有所不同:)

下面的代码将遍历该wp-content\uploads\images文件夹,并根据附加到该图像的名称来创建帖子标题。您可能希望将其更改为更好的名称,或者可能使用其他拥有的数据输入元数据(也许是Exif)。

function WPSE_1595_image_post() {

    // We need to use the default uploads dir
    $wp_upload_dir =  wp_upload_dir();
    // The actual folder
    $wp_upload_images = $wp_upload_dir['basedir'] . '/images';

    require_once(ABSPATH . 'wp-admin/includes/image.php');

    foreach (new DirectoryIterator($wp_upload_images) as $fileInfo) {

        if($fileInfo->isDot()) continue;

        $image_base = $fileInfo->getFilename();
        $image_name = pathinfo($fileInfo, PATHINFO_FILENAME);

        //Customize this post data as you wish
        $my_post_data = array(
            'post_title' => $image_name,
            'post_type' => 'post',
            'post_category' => array('1'),
            'post_author'   => 1,
            'post_status' => 'publish'
        );

        // We need the ID for the attachment
        $post_id = wp_insert_post($my_post_data);

        $wp_filetype = wp_check_filetype($image_base, null );

         //Customize this attachment data as you wish
        $attachment = array(
             'guid' => $wp_upload_dir['url'] . '/' . $image_name, 
             'post_mime_type' => $wp_filetype['type'],
             'post_title' => 'child-' . $image_name,
             'post_content' => '',
             'post_status' => 'inherit'
        );

        $imagefile = $wp_upload_images . '/' . $image_base;
        $attach_id = wp_insert_attachment( $attachment, $imagefile, $post_id );
        $attach_data = wp_generate_attachment_metadata( $attach_id, $imagefile );

        wp_update_attachment_metadata( $attach_id, $attach_data );
    }   
}

对于数千张以上的图像,您可能会更轻松地使用:


它会不断将调整大小后的图像添加回upload / images文件夹,为此,它还会生成新的帖子。这个过程是递归的,因此在我删除该功能之前,创建了将近800个帖子。生成的新尺寸应在常规的wp媒体位置进行。
Heena Shah,

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.