2015-03-13 4 views
1

У меня есть плагин для Wordpress (который я собираюсь создать), которые в основном будут использовать те же функции медиабиблиотеки (загрузка/просмотр/описание настроек и т. Д. На изображениях).Wordpress - копировать медиабиблиотеку или классифицировать?

Есть ли способ «скопировать» медиа-библиотеку, а затем использовать ее/модифицировать по своему усмотрению?

Я хочу разделить эти фотографии для разных клиентов (которые владелец сайта загружает). Я считаю, что встроенную медиа-библиотеку следует использовать для фотографий на сайте (например, логотипы, фотографии продуктов и т. Д.). Я не хочу использовать встроенную медиа-библиотеку со специальными фотографиями клиентов.

Рекомендации Возможно, есть лучший подход. (Лучше ли создавать категории в медиа-категориях для каждого клиента?) Если есть, скажите, пожалуйста. Я ищу рекомендации - не решение.

ответ

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

так, как я бы построить этот плагин, создает пользовательский тип записи, подобный тип загрузки носителя, а затем изменить его, как вы хотите (добавить категорию, например) ,

Мне нравится идея плагина, поэтому позвольте мне знать, что вы закончите, удачи.

Edit: Если вы на самом деле хотите, чтобы скопировать все файлы изображений в другой каталог вы могли бы сделать что-то вроде этого с помощью:

$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()); 
    } 
} 
+1

Спасибо большое! Я собираюсь вернуться к вам, когда плагин закончен :-) – bestprogrammerintheworld

1

Теоретически вы можете скопировать всю медиа-галерею.

Медиа-галерея (в панели администратора) является в основном архивом почтового типа. Тип сообщения в вопросе приложение.

Определив свой собственный тип сообщения, вы можете добавить все действия, отображения и функциональные крючки, необходимые для репликации функциональных возможностей вложения.

Если вы хотите классифицировать ваше вложение либо с помощью иерархической или неисторической таксономии , вы можете зарегистрировать пользовательскую таксономию для типа сообщения вложения.

Оба способа являются полукомплексными и, возможно, не нужны. Не могли бы вы описать свой сценарий использования более подробно, чтобы я мог помочь вам лучше.

+0

Спасибо за ваш ответ! К сожалению, я не могу отдать эту информацию. Вы узнаете, почему, когда плагин достигает рынка. – bestprogrammerintheworld