Wordpress - 复制媒体库或分类?
Wordpress - Copy media library or categorize?
我有一个用于 Wordpress 的插件(我打算创建),它基本上将使用媒体的相同功能 - 库(上传/查看/设置图像描述等)。
有没有办法"copying"媒体库然后it/modifiy随心所欲地使用?
背景:
我想为不同的客户(网站所有者上传的)分类这些照片。我认为内置媒体库应该用于特定站点的照片(如徽标、产品照片等)。我不想将内置 "media-library" 与特定客户的照片混在一起。
指南
也许有更好的方法。 (为每个客户在媒体类别中创建类别是否更好?)如果有,请告诉我。我正在寻找指南 - 而不是解决方案。
理论上,您可以复制整个媒体库。
媒体库(在管理面板中)基本上是一个 post 类型的存档。 Post 输入问题 附件.
通过定义自定义 post 类型,您可以添加复制附件功能所需的所有操作、显示和功能挂钩。
如果您想使用分层或非分层 分类法 对附件进行分类,您可以为附件 post 类型注册自定义分类法。
这两种方式都是半复杂的,可能不需要。能不能把你的使用场景描述的再详细点,这样我才能更好的帮助到你。
解决方案一:
首先查询 posts,然后对它们中的每一个使用如下代码:
$images = get_children( array(
'post_parent' => get_the_ID(),
'post_type' => 'attachment',
'post_mime_type' => 'image',
'numberposts' => -1
) );
foreach ( (array) $images as $image ) {
print wp_get_attachment_url( $image->ID );
}
我不喜欢这个解决方案,因为它会生成许多 SQL 个查询。
方案二:
编写您自己的 SQL 查询,它将一次 select 所有图像。它应该看起来像这样:
// change this to your custom post type, attachment in your case.
$post_type = 'attachment';
global $wpdb;
$where = get_posts_by_author_sql( $post_type );
$query = "SELECT * FROM $wpdb->posts p where p.post_type = 'attachment' AND (p.post_mime_type LIKE 'image/%') AND (p.post_status = 'inherit') AND p.post_parent IN (SELECT $wpdb->posts.ID FROM $wpdb->posts {$where} ) ORDER BY p.post_date DESC";
$results = $wpdb->get_results( $query );
if ( $results ) {
foreach ( (array) $results as $image ) {
print wp_get_attachment_url( $image->ID );
}
}
我构建该插件的方式是创建自定义 post 类型,类似于媒体上传类型,然后根据需要修改它(例如添加类别)。
我喜欢这个插件的想法,所以让我知道然后你就完成了,祝你好运。
编辑:如果您真的想将所有图像文件复制到另一个目录,您可以使用以下方法执行类似操作:
$source = wp_upload_dir(); // get WordPress upload directory
$dest= "wp-content/My-new-Directory"; // where you would like to copy
mkdir($dest, 0755);
foreach (
$iterator = new \RecursiveIteratorIterator(
new \RecursiveDirectoryIterator($source, \RecursiveDirectoryIterator::SKIP_DOTS),
\RecursiveIteratorIterator::SELF_FIRST) as $item
) {
if ($item->isDir()) {
mkdir($dest . DIRECTORY_SEPARATOR . $iterator->getSubPathName());
} else {
copy($item, $dest . DIRECTORY_SEPARATOR . $iterator->getSubPathName());
}
}
我有一个用于 Wordpress 的插件(我打算创建),它基本上将使用媒体的相同功能 - 库(上传/查看/设置图像描述等)。
有没有办法"copying"媒体库然后it/modifiy随心所欲地使用?
背景: 我想为不同的客户(网站所有者上传的)分类这些照片。我认为内置媒体库应该用于特定站点的照片(如徽标、产品照片等)。我不想将内置 "media-library" 与特定客户的照片混在一起。
指南 也许有更好的方法。 (为每个客户在媒体类别中创建类别是否更好?)如果有,请告诉我。我正在寻找指南 - 而不是解决方案。
理论上,您可以复制整个媒体库。
媒体库(在管理面板中)基本上是一个 post 类型的存档。 Post 输入问题 附件.
通过定义自定义 post 类型,您可以添加复制附件功能所需的所有操作、显示和功能挂钩。
如果您想使用分层或非分层 分类法 对附件进行分类,您可以为附件 post 类型注册自定义分类法。
这两种方式都是半复杂的,可能不需要。能不能把你的使用场景描述的再详细点,这样我才能更好的帮助到你。
解决方案一: 首先查询 posts,然后对它们中的每一个使用如下代码:
$images = get_children( array(
'post_parent' => get_the_ID(),
'post_type' => 'attachment',
'post_mime_type' => 'image',
'numberposts' => -1
) );
foreach ( (array) $images as $image ) {
print wp_get_attachment_url( $image->ID );
}
我不喜欢这个解决方案,因为它会生成许多 SQL 个查询。
方案二: 编写您自己的 SQL 查询,它将一次 select 所有图像。它应该看起来像这样:
// change this to your custom post type, attachment in your case.
$post_type = 'attachment';
global $wpdb;
$where = get_posts_by_author_sql( $post_type );
$query = "SELECT * FROM $wpdb->posts p where p.post_type = 'attachment' AND (p.post_mime_type LIKE 'image/%') AND (p.post_status = 'inherit') AND p.post_parent IN (SELECT $wpdb->posts.ID FROM $wpdb->posts {$where} ) ORDER BY p.post_date DESC";
$results = $wpdb->get_results( $query );
if ( $results ) {
foreach ( (array) $results as $image ) {
print wp_get_attachment_url( $image->ID );
}
}
我构建该插件的方式是创建自定义 post 类型,类似于媒体上传类型,然后根据需要修改它(例如添加类别)。
我喜欢这个插件的想法,所以让我知道然后你就完成了,祝你好运。
编辑:如果您真的想将所有图像文件复制到另一个目录,您可以使用以下方法执行类似操作:
$source = wp_upload_dir(); // get WordPress upload directory
$dest= "wp-content/My-new-Directory"; // where you would like to copy
mkdir($dest, 0755);
foreach (
$iterator = new \RecursiveIteratorIterator(
new \RecursiveDirectoryIterator($source, \RecursiveDirectoryIterator::SKIP_DOTS),
\RecursiveIteratorIterator::SELF_FIRST) as $item
) {
if ($item->isDir()) {
mkdir($dest . DIRECTORY_SEPARATOR . $iterator->getSubPathName());
} else {
copy($item, $dest . DIRECTORY_SEPARATOR . $iterator->getSubPathName());
}
}