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

时间:2010-09-09 作者:somatic

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

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

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

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

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

我希望这可以在一个自定义的管理面板中完成,但如果我必须在wp admin之外完成,那也没关系。。。

想法?

3 个回复
SO网友:Wyck

此脚本是一个概念验证(经过测试并正常工作),它不是一个插件,旨在被黑客攻击,它假设了以下几点:

它使用wp_insert_post 所以建议您不要将其挂接到任何管理挂钩,所以只需运行一次即可wp-content\\uploads 文件夹,更改此选项需要更多的环才能跳过。该示例使用一个名为\\images 在uploads文件夹中,可以更改此部分

  • 它不做任何错误检查,我只在一个包含20个图像的文件夹上测试了它,因此结果可能会有所不同:)
    1. 下面的代码将遍历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 );
          }   
      }
      
      对于任何超过数千张的图像,您可能会更容易使用:

    SO网友:timshutes

    有一个插件:Automatic Featured Image Posts Plugin

    从插件页面:

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

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

    我在本地机器上安装了这个。设置页面如下所示,允许您选择要将照片上载分配给的帖子类型(包括自定义帖子类型),以及所需的发布状态。

    Screenshot of plugin

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

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

    enter image description here

    帖子的标题由图像文件名设置。您应该能够使用它,并在主题中使用the_title()

    我在本地进行了测试,它在Wordpress 3.6中运行。

    我确信有一种更健壮或更灵活的方法来实现这一点,但在这种情况下,插件似乎完全按照您的要求执行,除了分配元数据。也许其他人可以把这部分充实一点。

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

    注意:确保您的image_size在函数中设置。php。我讨厌仅仅因为我忘记或更改了图像大小就必须撤消/删除10000张照片,或者运行一个非常长的“重新生成缩略图”!

    SO网友:hakre

    这个"Cleanup uploads folder, Media Library db structure" 这个问题有一些可能相关的插件建议——尽管并不是完全按照您的要求进行。但也许这些信息是有用的。

    结束

    相关推荐