У меня есть идентификаторы сообщений, и я хочу установить избранные изображения для этих сообщений с того же 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
Как я могу это сделать?
4 ответа
Вы можете установить изображение в качестве миниатюры поста, когда оно находится в вашей медиатеке. Чтобы добавить изображение в свою медиатеку, вам необходимо загрузить его на свой сервер.
Попробуйте этот код:
// 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 -настраиваемые-поля-вручную
Если вам нужно загрузить изображение, а затем назначить его как миниатюру сообщения, более быстрый способ - использовать 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 );
Я использовал медиа-менеджер WordPress wp.media для загрузки избранных изображений из формы в моем плагине. У него есть свои преимущества, и это довольно просто.
Часть 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 вам необходимо:
- откройте медиа-менеджер по нажатию кнопки
- вставить идентификатор в скрытый ввод, когда изображение выбрано
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/
Просто в дополнение к ответу @Naraj, если вы работаете во внешнем файле, не забудьте добавить:
require_once(ABSPATH . 'wp-admin/includes/media.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/image.php');
Если вы не добавите это, вы получите сообщение об ошибке, в котором говорится, что media_sideload_image не определено.
Похожие вопросы
Новые вопросы
php
PHP — это открытый, мультипарадигмальный, динамически типизированный и интерпретируемый язык сценариев, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.