Как программно установить избранное изображение из URL-адреса?

У меня есть несколько идентификаторов сообщений, и я хочу установить избранные изображения этих сообщений с одного и того же URL-адреса.

Вот мое добавление почтовых индексов:

$catid = get_cat_ID("XX Cat");

$my_post = array(); 
$my_post['post_title'] = $title; 
$my_post['post_content'] = $description; 
$my_post['post_status'] = 'publish'; 
$my_post['post_author'] = 1; 
$my_post['post_category'] = array( $catid ); 

$post_id = wp_insert_post( $my_post );

Пример: post_id = 1 Я хочу установить избранное изображение: example.com/image.png

Как я могу это сделать?


person Cris Denolatter    schedule 07.01.2017    source источник


Ответы (3)


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

попробуйте этот код:

 // Add Featured Image to Post
    $image_url        = 'http://s.wordpress.org/style/images/wp-header-logo.png'; // Define the image URL here
    $image_name       = 'wp-header-logo.png';
    $upload_dir       = wp_upload_dir(); // Set upload folder
    $image_data       = file_get_contents($image_url); // Get image data
    $unique_file_name = wp_unique_filename( $upload_dir['path'], $image_name ); // Generate unique name
    $filename         = basename( $unique_file_name ); // Create image file name

    // Check folder permission and define file location
    if( wp_mkdir_p( $upload_dir['path'] ) ) {
        $file = $upload_dir['path'] . '/' . $filename;
    } else {
        $file = $upload_dir['basedir'] . '/' . $filename;
    }

    // Create the image  file on the server
    file_put_contents( $file, $image_data );

    // Check image file type
    $wp_filetype = wp_check_filetype( $filename, null );

    // Set attachment data
    $attachment = array(
        'post_mime_type' => $wp_filetype['type'],
        'post_title'     => sanitize_file_name( $filename ),
        'post_content'   => '',
        'post_status'    => 'inherit'
    );

    // Create the attachment
    $attach_id = wp_insert_attachment( $attachment, $file, $post_id );

    // Include image.php
    require_once(ABSPATH . 'wp-admin/includes/image.php');

    // Define attachment metadata
    $attach_data = wp_generate_attachment_metadata( $attach_id, $file );

    // Assign metadata to attachment
    wp_update_attachment_metadata( $attach_id, $attach_data );

    // And finally assign featured image to post
    set_post_thumbnail( $post_id, $attach_id );

URL-адрес ссылки: http://www.wpexplorer.com/wordpress-featured-image-url/

Изменено в соответствии с вашим требованием: для этой цели игнорируйте стандарт WordPress и загружайте все свои посты в свою настраиваемую папку и добавляйте этот путь к изображению или прямой URL-адрес внешнего изображения в пост в качестве дополнительного мета-поля атрибута, и когда вы будете показывать пост в своей теме, просто используйте свой img с помощью идентификатора сообщения. демо-код: для настройки изображения

<?php
   update_post_meta (  7, 'imgkey', 'www.url.path' );//7 is post id
?>

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

<?php
$img_value = get_post_meta( get_the_ID(), 'imgkey', true );
?>
<img src="<?php echo $img_value?>">

Обратите внимание, если вы новичок в настраиваемых метаполях WordPress, прочитайте эту статью https://codex.wordpress.org/Custom_Fields
или
неофициальная статья о настраиваемых полях:https://premium.wpmudev.org/blog/creating-custom-fields-manually

person Hassan Saeed    schedule 07.01.2017
comment
Я хочу использовать только одно изображение. Но этот код добавляет одно изображение больше одного... Также я не хочу добавлять изображения разных размеров. Я хочу загрузить изображение, которое должно быть только оригинального размера... - person Cris Denolatter; 07.01.2017
comment
я обновляю свой ответ - person Hassan Saeed; 07.01.2017
comment
Как я могу получить URL-адрес и имя изображения, загруженного в html-форме для этого же кода? - person Komal R; 27.11.2018
comment
см. выше код $img_value фактически получит URL-адрес изображения - person Hassan Saeed; 23.03.2019
comment
Работает отлично. - person Faisal Ramzan; 30.06.2020
comment
Работает по назначению. Один из лучших ответов, которые я когда-либо находил. Примечания к комментариям к пункту и хорошему. Вам больше ничего не нужно. - person Karue Benson Karue; 12.07.2021

если вам нужно загрузить изображение, а затем назначить миниатюру сообщения, более быстрый способ - использовать media_sideload_image, а затем set_post_thumbnail

https://developer.wordpress.org/reference/functions/media_sideload_image/

$url     = "http://url-of-the-image.jpg";
$post_id = [post id]
$desc    = "image description";

$image = media_sideload_image( $url, $post_id, $desc,'id' );

set_post_thumbnail( $post_id, $image );
person Naraj    schedule 25.01.2021
comment
Теперь это реальный ответ. - person markmoxx; 01.02.2021
comment
Хороший ответ, но единственное, на что следует обратить внимание, это то, что вам нужно иметь расширение файла в URL-адресе. Если у вас есть URL-адрес API, у которого нет расширения файла, это не сработает. - person Antonio; 06.05.2021

Я использовал медиа-менеджер wordpress wp.media для загрузки избранных изображений из формы в моем плагине. У этого есть свои преимущества, и это довольно просто.

Медиаменеджер Wordpress

HTML-часть: в html-форме вам нужны только 2 элемента, кнопка и скрытое поле ввода для хранения идентификатора изображения и его отправки вместе с формой. (Вы можете использовать ajax для обновления, но в моем случае этот метод был проще)

<input type="button" name="select-thumbnail" class="button" Value="Select Thumbnail">
<input type="hidden" name="thumbnail-id" value="">

Javascript (jQuery): в JavaScript вам необходимо:

  1. открыть медиа-менеджер по нажатию кнопки
  2. вставьте идентификатор в скрытый ввод, когда изображение выбрано

jQuery('input[name="select-thumbnail"]').click(function(e) {
  e.preventDefault();
    
  var thumbMediaManager;
  //open if already initialized
  if(thumbMediaManager) {
    thumbMediaManager.open();
    return;
  }
        
  //create media manafer
  thumbMediaManager = wp.media({
    title: 'Select Thumbnail',
    multiple: false,
    library : {
    type : 'image',
    }
  });
        
  //when an image is selected
  thumbMediaManager.on('select', function() {
  var selection = thumbMediaManager.state().get('selection').first().toJSON();
  //console.log(selection);

  //insert the id into input field
  jQuery('input[name="thumbnail-id"]').val(selection.id);
    
  //Finally, open the media manager
  thumbMediaManager.open();
});

Php: когда форма отправлена, извлеките идентификатор вложения изображения и идентификатор сообщения (в моем случае из wp_insert_post) и используйте set_post_thumbnail().

$thumbnail_attachment_id = sanitize_text_field($_POST['thumbnail-id']);
$postId = wp_insert_post($newPost);

set_post_thumbnail($postId, $thumbnail_attachment_id);

set_post_thumbnail: https://developer.wordpress.org/reference/functions/set_post_thumbnail/

person Victor    schedule 22.02.2021