1

我有一个用于 Wordpress 的插件(我的目标是创建),它基本上将使用媒体的相同功能 - 库(在图像上上传/查看/设置描述等)。

有没有办法“复制”媒体库,然后根据需要使用/修改它?

背景: 我想为不同的客户(网站所有者上传)对这些照片进行分类。我相信内置媒体库应该用于特定于站点的照片(如徽标、产品照片等)。我不想将内置的“媒体库”与特定客户的照片混合在一起。

指导方针 也许有更好的方法。(为每个客户在媒体类别中创建类别会更好吗?)如果有,请告诉我。我正在寻找指导方针 - 不是解决方案。

4

2 回答 2

1

从理论上讲,您可以复制整个媒体库。

媒体库(在管理面板中)基本上是一个帖子类型的存档。有问题的帖子类型为附件

通过定义您的自定义帖子类型,您可以添加复制附件功能所需的所有操作、显示和功能挂钩。

如果您想通过使用分层或非分层分类法对附件进行分类,您可以为附件帖子类型注册自定义分类法。

这两种方式都是半复杂的,并且可能是不需要的。您能否更详细地描述您的使用场景,以便我可以更好地帮助您。

于 2015-03-22T01:12:08.903 回答
1

解决方案 1:首先查询帖子,然后为每个帖子使用类似以下代码:

$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 查询。

解决方案 2:编写您自己的 SQL 查询,该查询将一次选择所有图像。它应该看起来像这样:

// 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 );
      }
    }

我构建该插件的方式是创建一个自定义帖子类型,类似于媒体上传类型,然后根据需要对其进行修改(例如添加一个类别)。

我喜欢插件的想法,所以让我知道然后你完成,祝你好运。

编辑:如果您真的想将所有图像文件复制到另一个目录,您可以使用以下方法执行以下操作:

$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());
  }
}
于 2015-03-22T11:31:56.750 回答