cloak-labs / wp-bulk-media-importer
从外部URL批量导入图片到WP媒体库。
0.0.1
2024-08-27 17:09 UTC
Requires
- composer/installers: ^2.2
README
这是一个小的PHP/Composer包(旨在由WordPress插件/主题开发者使用),它提供了一个简单的面向对象的API,用于从CSV文件中引用的外部URL批量导入图片。您还可以导入图片的alt文本、标题、描述,并挂钩到上传过程以导入每个图片的其他自定义内容(例如,根据CSV值将每个图片附加到分类法术语)。
大多数批量媒体导入插件似乎仅支持导入帖子/页面/CPT,并且可以选择导入图片/媒体,只要它们附加到正在导入的帖子;而此包只需将图片上传到WP媒体库,无需您将其附加到帖子/页面。
注意:此插件不通过WP管理UI公开任何内容--您必须对PHP有一定了解才能使用它。
安装
使用Composer在项目的根目录中要求此包。
composer require cloak-labs/wp-bulk-media-importer
用法
use CloakWP\BulkMediaImporter; BulkMediaImporter::make() ->fromCsv(get_theme_file_path('/assets/images.csv')) ->onUpload(function ($imageId, $imageMeta) { /* Custom logic to attach each imported image to a term/category from the custom taxonomy `category_media`, if a valid term/category slug is set in the CSV's `category` column. */ if (BulkMediaImporter::isMetaValid($imageMeta, 'category')) { $taxonomy = 'category_media'; $term = get_term_by('slug', $imageMeta['category'], $taxonomy); if (!$term) return false; wp_set_object_terms($imageId, $term->term_id, $taxonomy); } }) ->run(); // make sure to call `run` to actually run the import
不建议直接在functions.php
中包含上述实现,因为您可能会多次运行导入。您可以创建一个WP管理菜单项,在点击时运行导入,或者您可以创建一个自定义WP-CLI命令来运行它,如下所示
// in functions.php if (defined('WP_CLI') && WP_CLI) { WP_CLI::add_command('bulk-media-import', function () { BulkMediaImporter::make() ->fromCsv(get_theme_file_path('/assets/images.csv')) ->onUpload(function ($imageId, $imageMeta) { if (BulkMediaImporter::isMetaValid($imageMeta, 'category')) { $taxonomy = 'category_media'; $term = get_term_by('slug', $imageMeta['category'], $taxonomy); if (!$term) { WP_CLI::warning("Term not found: " . $imageMeta['category']); return false; } wp_set_object_terms($imageId, $term->term_id, $taxonomy); WP_CLI::success("Assigned category to image ID: $imageId"); } }) ->run(); }); }
注意:
- CSV预期有一个
src
列引用外部图片URL - CSV还期望alt文本、标题和描述分别在
alt
、caption
、description
列。 - 任何其他CSV列将作为
onUpload
方法的第二个参数包含在$imageMeta
中,使您能够根据自定义CSV值编写自定义导入逻辑。
未来
此包非常年轻,目前仅支持从引用外部图片URL的CSV导入;但它有意设计(并命名)以支持未来其他类型的批量图片导入场景--请创建一个新的问题,描述您希望导入的场景。