Intereting Posts
Невозможно получить информацию о загрузке с помощью json_encode Стиль меню для последнего пункта меню Как добавить функцию к настраиваемым полям, когда страница / сообщение имеет пароль? Изменение иерархии шаблонов Исключить категории из списка (wp_list_categories) Разрешить роли автора публиковать один тип сообщения, а не другой Список URL-адресов WordPress по умолчанию Как перенаправить на страницу edit.php после сохранения сообщения, продукта и показ сообщения «после сохранения», Показать product_brand с функцией get_the_terms Как установить постоянные ссылки, когда сообщения и страницы имеют разные структуры URL? Является ли WP уязвимым при обновлении плагинов или тем? Есть ли у тегов даты? Добавление фильтра в заголовок без изменения названия меню Уменьшите количество SQL-запросов внутри цикла WP_Query для извлечения данных автора Как добавить пользовательское правило перезаписи в .htaccess?

Загружать загрузчик WP Media только один раз на странице параметров

Странная проблема со мной, которую я не могу исправить. На моей странице параметров темы я добавил опции для загрузки изображений для логотипа, а другой для изображения backgroud. Вот мой HTML

<table class="form-table"> <tr> <th scope="row"><?php _e('Logo Image'); ?></th> <td><label for="logo_link"> <input id="image-url" type="text" name="logo_link" value="<?php echo get_option('logo_link'); ?>" size="50" /> <input id="upload-button" class="button" type="button" value="Upload Image" /> </label> </td> </tr> <tr> <th scope="row"><?php _e('BG Image'); ?></th> <td><label for="bg_image"> <input id="image-url" type="text" name="bg_image" value="<?php echo get_option('bg_image'); ?>" size="50" /> <input id="upload-button" class="button" type="button" value="Upload Image" /> </label> </td> </tr> </table> 

Это как я заключил соглашение с JS

 function media_uploader_enqueue() { wp_enqueue_media(); wp_register_script('image-upload-js', get_stylesheet_directory_uri(). '/js/image-upload-js.js', true, '1.0.1'); wp_enqueue_script('image-upload-js'); } add_action('admin_enqueue_scripts', 'media_uploader_enqueue'); для function media_uploader_enqueue() { wp_enqueue_media(); wp_register_script('image-upload-js', get_stylesheet_directory_uri(). '/js/image-upload-js.js', true, '1.0.1'); wp_enqueue_script('image-upload-js'); } add_action('admin_enqueue_scripts', 'media_uploader_enqueue'); 

Это то, что я вложил в image-upload-js.js

 jQuery(document).ready(function($){ var mediaUploader; $('#upload-button').click(function(e) { e.preventDefault(); if (mediaUploader) { mediaUploader.open(); return; } mediaUploader = wp.media.frames.file_frame = wp.media({ title: 'Choose Image', button: { text: 'Choose Image' }, multiple: false }); mediaUploader.on('select', function() { attachment = mediaUploader.state().get('selection').first().toJSON(); $('#image-url').val(attachment.url); }); mediaUploader.open(); }); }); 

Досадная проблема

Загрузочный носитель открывается для поля « Логотип», но не для изображения BG . Я также могу сохранить параметры, и все установлено. Если я поместил URL вручную в текстовое поле изображения BG, это файл. Для этого не работает медиа-загрузчик. Если я сменю блок HTML, загрузчик откроется только для первого блока. Любая причина, почему это происходит. благодаря

Причина, по которой загрузчик мультимедиа не открывается при нажатии второй кнопки, заключается в том, что обе кнопки имеют одинаковый идентификатор, который также привязан к функции, открывающей ваш загрузчик. Идентификаторы элементов всегда должны быть уникальными, поэтому прослушиватель функции .click будет обнаруживать, когда пользователь нажимает первую кнопку (= первая с id = "image-url"). Чтобы решить эту проблему, попробуйте назначить общий класс для обеих кнопок и привяжите функцию загрузчика мультимедиа к этому классу.

При выборе изображения для вашего изображения BG вы столкнетесь с той же проблемой, так как оба внешних входа имеют одинаковый идентификатор («URL-адрес изображения»), что означает, что изображение BG будет присвоено логотипу логотипа. Чтобы обойти эту проблему, вы можете использовать функции трассировки дерева jQuery, чтобы получить родителя текущей кнопки ввода и вызвать .val (attachment.url) для этого элемента.