Как установить изображение с изображением (уменьшенное изображение) по URL-адресу изображения при использовании wp_insert_post ()?

Просматривая запись ссылки на функцию для wp_insert_post () , я заметил, что в массиве нет параметров который позволит мне установить «Лучшее изображение» для сообщения, отображаемого в миниатюре в моей теме.

Я рассмотрел такие функции, как set_post_thumbnail () , как предложил г-н Беннетт, но это, похоже, относительно новое дополнение к самому WordPress и коду WordPress. Таким образом, я не могу найти источники, объясняющие, как должен быть получен и предоставлен параметр $ thumbnail_id. Если это действительно функция для использования, каким образом я могу предоставить ее с допустимым параметром $ thumbnail_id, когда все, что у меня есть, является URL-адресом изображения?

Спасибо заранее!

54 голоса | спросил Chris 27 Jam1000000amFri, 27 Jan 2012 01:56:46 +040012 2012, 01:56:46

5 ответов


97

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

Использование:

Generate_Featured_Image ('../wp-content/my_image.jpg', $ post_id);
                                                      //$ post_id - это числовой идентификатор ... Вы также можете получить идентификатор с помощью: wp_insert_post ()

Функции:

function Generate_Featured_Image ($ image_url, $ post_id) {
    $ upload_dir = wp_upload_dir ();
    $ image_data = file_get_contents ($ image_url);
    $ filename = basename ($ image_url);
    if (wp_mkdir_p ($ upload_dir ['path'])) $ file = $ upload_dir ['path']. '/'. $ Имя файла;
    else $ file = $ upload_dir ['basedir']. '/'. $ Имя файла;
    file_put_contents ($ file, $ image_data);

    $ wp_filetype = wp_check_filetype ($ filename, null);
    $ attachment = array (
        'post_mime_type' => $ Wp_filetype [ 'типа'],
        'post_title' => sanitize_file_name ($ имя_файла),
        'post_content' => '',
        'post_status' => «Унаследуют»
    );
    $ attach_id = wp_insert_attachment ($ attachment, $ file, $ post_id);
    require_once (ABSPATH. 'wp-admin /includes /image.php');
    $ attach_data = wp_generate_attachment_metadata ($ attach_id, $ file);
    $ res1 = wp_update_attachment_metadata ($ attach_id, $ attach_data);
    $ res2 = set_post_thumbnail ($ post_id, $ attach_id);
}

http://codex.wordpress.org/Function_Reference/wp_upload_dir

http://codex.wordpress.org/Function_Reference/wp_insert_attachment


EDIT: Добавлено создание пути

http://codex.wordpress.org/Function_Reference/wp_mkdir_p

ответил Rob Vermeer 6 FebruaryEurope/MoscowbMon, 06 Feb 2012 02:07:36 +0400000000amMon, 06 Feb 2012 02:07:36 +040012 2012, 02:07:36
10

Попробуйте использовать set_post_thumbnail () .

Отредактируйте Отто: Вы уточнили свой вопрос, поэтому я уточню ответ, который дал Чип.

В принципе, вам нужно также создать «приложение» для сообщения. Когда изображение загружается в медиа-библиотеку WordPress, для него создается специальная запись с добавлением типа сообщения. Это вложение связано с определенной записью через идентификатор post_parent.

Итак, если вы знаете идентификатор вложения, то вызов set_post_thumbnail с почтовым объектом или идентификатором, а идентификатор вложения просто устанавливает флаг миниатюр сообщений.

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

Просто наличие файла, загруженного и прикрепленного к сообщению, ничего не делает автоматически. Это просто своего рода механизм категоризации. Например, механизм галереи использует прикрепленные изображения сообщения для создания [галереи] для этой записи. Миниатюра для сообщения - это только одно из прикрепленных изображений, которое было настроено как миниатюра.

Подробнее о том, как использовать wp_insert_attachment, можно найти в кодексе (см. выше).

ответил Chip Bennett 27 Jam1000000amFri, 27 Jan 2012 02:08:09 +040012 2012, 02:08:09
4

Я хотел бы улучшить ответ Роба, используя основные функции WP download_url и media_handle_sideload

& л;? PHP
/**
* Загружает изображение с указанного URL-адреса и прикрепляет его к сообщению как миниатюру сообщения.
*
* @param string $ file URL-адрес изображения для загрузки.
* @param int $ post_id Идентификатор сообщения, с которым должен ассоциироваться миниатюра сообщения.
* @param string $ desc Необязательно. Описание изображения.
* @return string | WP_Error Attachment ID, объект WP_Error в противном случае.
* /
функция Generate_Featured_Image ($ file, $ post_id, $ desc) {
    //Установите переменные для хранения, исправьте имя файла файла для строк запроса.
    preg_match ('/[^\?]+\.(jpe?g|jpe|gif|png)\b/i', $ file, $ matches);
    if (! $ matches) {
         return new WP_Error ('image_sideload_failed', __ ('Недопустимый URL-адрес изображения'));
    }

    $ file_array = array ();
    $ file_array ['name'] = basename ($ matches [0]);

    //Загружаем файл в папку temp.
    $ file_array ['tmp_name'] = download_url ($ file);

    //Если временное сохранение ошибки, верните ошибку.
    if (is_wp_error ($ file_array ['tmp_name'])) {
        return $ file_array ['tmp_name'];
    }

    //Делаем проверку и хранение.
    $ id = media_handle_sideload ($ file_array, $ post_id, $ desc);

    //Если ошибка сохраняется постоянно, отмените связь.
    if (is_wp_error ($ id)) {
        @unlink ($ file_array ['tmp_name']);
        return $ id;
    }
    return set_post_thumbnail ($ post_id, $ id);

}
ответил Jan Beck 2 MaramWed, 02 Mar 2016 10:23:22 +03002016-03-02T10:23:22+03:0010 2016, 10:23:22
3

set_post_thumbnail () - лучшая функция для этого требования.

Я думаю, вы найдете идентификатор вложения через get_children () или get_posts () . Результат имеет массив, внутри которого находится ID. Следующий пример для тестирования; надеюсь это работает; писать без тестов, только на месте.

Для вашего требования важно, чтобы вы изменили get_the_ID () с помощью post-ID; верните идентификатор вложения, и вы можете использовать foth set_post_thumbnail ().

$ attachments = get_children (
    массив (
        'post_parent' => get_the_ID (),
        'post_type' => «Привязанность»,
        'post_mime_type' => 'образ'
    )
);
foreach ($ attachments as $ attachment_id => $ attachment) {
    echo wp_get_attachment_image ($ attachment_id);
}
ответил bueltge 6 FebruaryEurope/MoscowbMon, 06 Feb 2012 19:14:25 +0400000000pmMon, 06 Feb 2012 19:14:25 +040012 2012, 19:14:25
3

Просто нашел это и сделал его намного проще, работает, но я не скруббер безопасности

если (! Пусто ($ _ FILES)) {
    require_once (ABSPATH. 'wp-admin /includes /post.php');
    require_once (ABSPATH. 'wp-admin /includes /image.php');
    require_once (ABSPATH. 'wp-admin /includes /file.php');
    require_once (ABSPATH. 'wp-admin /includes /media.php');

    $ post_ID = "ваш почтовый идентификатор!";

    $ attachment_id = media_handle_upload ('файл', $ post_ID);
    set_post_thumbnail ($ post_ID, $ attachment_id);
}

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

ответил Jesse Baker 21 FebruaryEurope/MoscowbSat, 21 Feb 2015 02:45:56 +0300000000amSat, 21 Feb 2015 02:45:56 +030015 2015, 02:45:56

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132