• Решено Phoenix

    (@azerphoenix)


    Доброго времени суток, уважаемые форумчане!

    Необходимо зарегистрировать медиафайлы в библиотеке после того, как я загрузил их в папку /uploads по ФТП.
    Воспользовался плагинами:
    Media from ftp (не работает). На старых версиях WP работал корректно.
    Add from server работает, но очень медленно. Файлов около 50 000

    Как можно массово зарегистрировать медиафайлы иными способами?

    В одном из форумов нашел интересный код, но он также не заработал на свежей версии WP:

    function thisismyurl_add_media_to_library() {
    
        global $wpdb;
    
        $file_count = 0;
    
        /* if the user isn't an admin user, don't do anything */
        if ( ! current_user_can( 'manage_options' ) )
            return;
    
        /* (you'll want to reset this to your path */   
        $file_path = ABSPATH . '/import/path/to/files/';
    
        /* get a list of all files in a specific directory */
        $files = glob( $file_path . '*.jpg');
    
        if ( ! empty( $files ) ) {
    
            /* now we loop the files */
            foreach ( $files as $file ) {
                unset( $post_id );
    
                /* it's likely that a server will time out with too many files so we're going to limit it to 999 new files */
                if ( $file_count < 999 ) {
    
                    $filename = str_replace( $file_path, '', $file );
                    /* check to see if the image already exists */
                    $post_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM  $wpdb->posts WHERE post_title = %s", $filename ) );
    
                    /* the file does not exist */
                    if ( empty( $post_id ) ) {
    
                        /* only count new files when checking for the file count */
                        $file_count++;
    
                        $attachment = array(
                            'guid'           => $wp_upload_dir['url'] . '/' . basename( $filename ), 
                            'post_mime_type' => wp_check_filetype( basename( $file ), null ),
                            'post_title'     => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
                            'post_content'   => '',
                            'post_status'    => 'inherit'
                        );
    
                        wp_insert_attachment( $attachment, $filename );
    
                        /* this is commented out for now, but if you uncomment it, the code will delete each file after it's been inserted */
                        /*
    
                        if ( $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM  $wpdb->posts WHERE post_title = %s", $filename ) ) )
                            unlink( $file );
    
                        */
    
                    } /* if */
                }
    
            } /* foreach  */
    
        } /* if */
    
    }
    add_action( 'wp_head', 'thisismyurl_add_media_to_library' );

    Добавлял его в файл functions.php темы, а также пробовал создать php файл и загрузил в папку mu-plugins.

    Заранее благодарю Вас за ответы.

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Данный код работает, только если файлов меньше 999:

    
    /* it's likely that a server will time out with too many files so we're going to limit it to 999 new files */
    if ( $file_count < 999 ) {
        ...
    }
    

    Нужно либо доработать его, чтобы список файлов для импорта создавался по частям, либо всё-таки воспользоваться плагином Add From Server.

    Спасибо.
    Что-нибудь придумаю…
    Жаль, что нет других готовых решений по этому вопросу. Казалос бы сколько сайтов переносятся из других CMS в WordPress.

    • Ответ изменён 7 лет, 6 месяцев назад пользователем Phoenix.

    Разобрался в вышеуказанном скрипте и он все-таки заработал.
    Порядок действий:
    1) Создать рнр файл, вставить в нее вышеуказанный код и заменить строку с
    /import/path/to/files/ на ВАШ путь. В поем случае wp-content/uploads
    2) Подключиться по фтп /wp-content/mu-plugins и загрузить рнр файл. Если такой папки нету, то необходимо создать. Не путать с папкой plugins.
    3) Зайти в админку = Библиотека файлов и вы увидите, как файлы начну постепенно добавляться. На самом деле скрипт не ограничивает кол-во файлов… По сути он импортирует первые новые 999 файлов, затем проверяет остальные файлы на новизну (если имеются в Библиотеке, то не импортирует… если нет то опять импортирует 999 файлов и т.д.)
    4) И не забудьте обновить библиотеку несколько раз, если у вас несколько тысяч файлов…

    • Ответ изменён 7 лет, 6 месяцев назад пользователем Phoenix.
Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Тема «Массовая регистрация медиафайлов в библиотеке» закрыта для новых ответов.