Intereting Posts
Невозможно вызвать WPDB внутри шаблона RSS WP Query работает вне функции, а не внутри функции Плагин CAPTCHA, где я могу использовать свои собственные изображения и задавать свои собственные вопросы? Пользовательские типы сообщений вместо обычных почтовых категорий в шаблоне страницы Как изменить текст «Сбросить пароль» в кнопке отправки Проблема разбиения на страницы Переопределение правил переопределения таксономии вместо маскировки Как я могу изменить ссылку меню, когда содержимое страницы пуст? Попытка написать shortcode с get_post_meta, но не работает Как добавить поля ценообразования в форму гравитации? Публикация html прямо с ftp на wordpress Как ограничить параметры статуса для массового / быстрого редактирования только опубликованными и черновыми? Синхронизация контента в Multisite. Возможное? Общие вопросы по пользовательским полям: front end submit + back end management + display Действия строки не отображаются? Зачем?

получить значения db для внешнего js-файла

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

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

Загрузчик по умолчанию запускается на основе id .
Я хочу сделать это более динамичным, но не знаю, как это сделать. Я знаю, что могу просто создать новый .js файл и добавить к нему номер для работы. Но мне нужно 20 загрузчиков изображений. Было бы безумным создать 20 разных файлов.

Мета-бокс загружается, если для страницы используется определенный шаблон. Поэтому сначала пользователь должен создать страницу с шаблоном для активации мета-окна. Имея это в виду, я уже знаю определенную информацию. Я думал, что, если я возьму $page_ID чтобы динамически добавлять id во внешний файл .js . Но это все еще оставляет мне проблему с тем, что каждый id остается прежним.

Итак, вот что я сделал:

Я обновил вопрос. Смотри ниже

И это внешний .js для загрузчика изображений:
Я обновил вопрос. Смотри ниже

Было бы неплохо, если бы у меня было что-то, что добавляет уникальное значение id , так что мне не нужно создавать 20 файлов!

———–ОБНОВИТЬ———-
Я изменил пару вещей, и теперь у меня осталась одна проблема. Данные, сохраненные в базе данных no, имеют имя страницы и конечный номер. Так выглядит:
text-{name-page}_1

Поскольку я знаю, сколько мета-боксов будет, я могу просто их подвести (я знаю не самый элегантный вариант, но время – проблема).

НО … почему всегда есть

Для загрузчика изображений сценарий использует внешний .js файл. Вот id выбранной кнопки выбора. Мне нужно также сделать это «динамическим», но как я могу получить значение имени кнопки во внешнем файле?

здесь загружается изображение:

 <?php $post = get_post($post_id, ARRAY_A); $post_name = $post['post_name']; $a = '_'.$post_name.'_1'; ?> <input type="button" id="dynamic-image-button<?php echo $a ?>" class="button" value="<?php _e( 'Kies of Upload', 'dynamic-textdomain' )?>" /> 

Это внешний .js

 /* * Attaches the image uploader to the input field */ jQuery(document).ready(function($){ // Instantiates the variable that holds the media library frame. var meta_image_frame; // Runs when the image button is clicked. $('#dynamic-image-button').click(function(e){ // Prevents the default action from occuring. e.preventDefault(); // If the frame already exists, re-open it. if ( meta_image_frame ) { meta_image_frame.open(); return; } // Sets up the media library frame meta_image_frame = wp.media.frames.meta_image_frame = wp.media({ title: meta_image.title, button: { text: meta_image.button }, library: { type: 'image' } }); // Runs when an image is selected. meta_image_frame.on('select', function(){ // Grabs the attachment selection and creates a JSON representation of the model. var media_attachment = meta_image_frame.state().get('selection').first().toJSON(); // Sends the attachment URL to our custom image input field. $('#dynamic-image').val(media_attachment.url); }); // Opens the media library frame. meta_image_frame.open(); }); }); 

Как я могу получить значение $a во внешние js?

——- Дополнительные ——–
Это то, что уже было в скрипте:

 function dynamic_image_enqueue() { global $typenow; $post = get_post($post_id, ARRAY_A); $post_name = $post['post_name']; $a = '_'.$post_name.'_1'; $b = '_'.$post_name.'_2'; if( $typenow == 'page' ) { wp_enqueue_media(); wp_register_script( 'dynamic-box-image', plugin_dir_url( __FILE__ ) . 'dynamic-box-image.js', array( 'jquery' ) ); wp_localize_script( 'dynamic-box-image', 'meta_image', array('title' => __( 'Kies of Upload een afbeelding', 'dynamic-textdomain' ), 'button' => __( 'Gebruik deze afbeelding', 'dynamic-textdomain' ),)); wp_enqueue_script( 'dynamic-box-image' ); }} add_action( 'admin_enqueue_scripts', 'dynamic_image_enqueue' ); ?> 

——— ОБНОВИТЬ———
Он утверждает, что значение не определено.
Я попытался сделать предупреждение, чтобы получить ценность, но не повезло
Я добавил:

 ,'a_value' => __( $a, 'dynamic-textdomain' ) 

В wp_localize_script .

В примере:
alert( object_name.some_string);
мое alert(meta_image.a_value);

Solutions Collecting From Web of "получить значения db для внешнего js-файла"

Вам нужно использовать wp_localize_script() когда вы ставите в очередь скрипт js. Обычно это хорошая альтернатива ajax-способу, и это спасет вас от создания нескольких js-файлов.

wp_localize_script() может использоваться, чтобы сделать любые данные доступными для вашего скрипта, которые вы обычно можете получить только со стороны сервера WordPress.

Как вы можете видеть на выделенной странице codex

 add_action('admin_enqueue_scripts', 'wpse_249089'); function wpse_249089(){ // Register the script wp_register_script( 'some_handle', 'path/to/myscript.js' ); // Localize the script with new data $translation_array = array( 'some_string' => __( 'Some string to translate', 'plugin-domain' ), 'a_value' => '10' ); wp_localize_script( 'some_handle', 'object_name', $translation_array ); // Enqueued script with localized data. wp_enqueue_script( 'some_handle' ); } 

Затем в файле js вы можете использовать его следующим образом:

 <script> // alerts 'Some string to translate' alert( object_name.some_string); // alerts '10' alert( object_name.a_value); </script> 

Надеюсь, поможет!