Добавление кнопки "Добавить медиафайл" в пользовательский плагин WordPress
Если вы хотите добавить кнопку добавления медиафайлов в ваши панели администратора:
Вам необходимо использовать wp_enqueue_media();
add_action ( 'admin_enqueue_scripts', function () {
if (is_admin ())
wp_enqueue_media ();
} );
Затем используйте этот JavaScript:
jQuery(document).ready(function() {
var $ = jQuery;
if ($('.set_custom_images').length > 0) {
if ( typeof wp !== 'undefined' && wp.media && wp.media.editor) {
$('.set_custom_images').on('click', function(e) {
e.preventDefault();
var button = $(this);
var id = button.prev();
wp.media.editor.send.attachment = function(props, attachment) {
id.val(attachment.id);
};
wp.media.editor.open(button);
return false;
});
}
}
});
Используйте этот HTML:
<p>
<input type="number" value="" class="regular-text process_custom_images" id="process_custom_images" name="" max="" min="1" step="1">
<button class="set_custom_images button">Установить ID изображения</button>
</p>

Отлично! Я просто хотел заменить "$" на "jQuery", и всё заработало как ожидалось! Спасибо.

Нет необходимости в is_admin()
, когда вы используете хук admin_enqueue_scripts
. Также я бы проверил, находитесь ли вы на нужной странице, с помощью get_current_screen()
.

Для тех, кому, как и мне, может понадобиться URL изображения, можно использовать следующее: var attachmentURL = wp.media.attachment(attachment.id).get("url");
. Я поместил это внутрь function(props, attachment)

Показывать миниатюру вместо числа
В качестве небольшой доработки я сделал следующее...
Изменил числовое поле ввода на скрытое.
Добавил:
$imgid = (isset($instance['imgid'])) ? $instance['imgid'] : "";
$img = wp_get_attachment_image_src($imgid, 'thumbnail');
И затем... перед скрытым полем.
if($img != "") {
?>
<img src="<?= $img[0]; ?>" width="80px" /><br />
<?php
}
Это позволит отображать миниатюру изображения на стороне пользователя вместо числа :)
