• В папке img плагина лежит картинка. Мне нужно, чтобы при активации плагина эта картинка перемещалась в папку загрузок и возвращался ее id. (чтобы в дальнейшем передать это значение как дефолтное в add_option).
    При этом привязывать изображение к конкретному посту не нужно!
    Как это сделать?
    Причем все действия происходят внутри функции, которую повесил на register_activation_hook

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    Думаю стоит попробовать как-нибудь так:

    require_once( ABSPATH . 'wp-admin/includes/file.php' );
    $wp_upload_dir = wp_upload_dir();
    
    $img = 'pict1.jpg';
    $filename_main = $wp_upload_dir['path'] . '/' . $img;
    $filename_main2 = plugin_dir_path(__FILE__) . 'img/' . $img;
    copy($filename_main2, $filename_main);
    
    $filetype = wp_check_filetype(basename($filename_main), null);
    
    $attachment = array(
        'guid' => $wp_upload_dir['url'] . '/' . basename($filename_main),
        'post_mime_type' => $filetype['type'],
        'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename_main)),
        'post_content' => '',
        'post_status' => 'inherit'
    );
    
    $attach_id = wp_insert_attachment($attachment, $filename_main);
    
    require_once( ABSPATH . 'wp-admin/includes/image.php' );
    
    $attach_data = wp_generate_attachment_metadata($attach_id, $filename_main);
    wp_update_attachment_metadata($attach_id, $attach_data);

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Можно воспользоваться функцией media_handle_sideload() (там есть пример).

Просмотр 2 ответов — с 1 по 2 (всего 2)

Тема «Загрузить файл и получить id при активации плагина» закрыта для новых ответов.