Intereting Posts
получение значений из короткого кода с включенным Символы Unicode сохраняются забавным способом в БД Какое действие связано с обновлением настраиваемого поля в сети / сайте-info.php в многопользовательском режиме при обновлении информации о сайте Синхронизировать пользователя с электронной почтой cPanel? Как триггер сохранить пост при обновлении метаданных Получить имена таксономии по идентификатору сообщения Почему пост-slug не сохраняется для черновиков? Присоединение для замены областей боковой панели / виджета WordPress, удаляющий теги BR, нуждается в помощи Цикл WordPress не работает на статической передней странице Динамические закладки бутстрапа с post_title не отображают значение_content Сортировка данных WooCommerce с помощью WP-CRON? Изменение формата кода для wordpress Использование одного и того же короткого кода для отображения любой таблицы из базы данных Изменение имен страниц в wordpress

Загрузите несколько изображений с помощью media_handle_upload с несколькими полями файлов

Мне нужно добавить несколько изображений с описаниями изображений из wp admin.

Форма администратора:

<label for="image[]">Image</label> <input type="file" name="image[]"/> <label for="imgdesc[]">Description</label> <input type="text" name="imgdesc[]"/> <label for="image[]">Image</label> <input type="file" name="image[]"/> <label for="imgdesc[]">Description</label> <input type="text" name="imgdesc[]"/> . . . // number of image and description is dynamic <?php wp_nonce_field('image', 'image_upload_nonce'); ?> 

Вот мой PHP-код во время подачи формы.

 <?php if (isset($_POST['image_upload_nonce']) && wp_verify_nonce($_POST['image_upload_nonce'], 'image')) { require_once( ABSPATH . 'wp-admin/includes/image.php' ); require_once( ABSPATH . 'wp-admin/includes/file.php' ); require_once( ABSPATH . 'wp-admin/includes/media.php' ); //Here my doubt to handle multiple images $attachment_id = media_handle_upload('image', 0); if (is_wp_error($attachment_id)) { echo $attachment_id->get_error_message(); } else { // The image was uploaded successfully! } } else { echo "The security check failed, maybe show the user an error."; } 

Я не знаю, подходит ли мой подход. Если нет, пожалуйста, поправьте меня.

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

Вот шаги

  1. Зарегистрируйте свою настройку, используя register_setting function
  2. Создайте меню с помощью add_menu_page . Это также требует функции возврата
  3. Добавьте thickbox и media-upload используя wp_enqueue_script и wp_enqueue_style
  4. Используйте функцию обратного вызова, чтобы отобразить форму, и вы также можете использовать в ней собственные скрипты.
  5. Ниже приведен пример использования класса для отображения формы с возможностью загрузки и повторяемым полем

,

 <?php class WP_Site_Option{ function __construct(){ add_action('admin_init', array(&$this,'register_settings') ); add_action('admin_menu', array(&$this,'create_menu')); add_action('admin_print_scripts', array(&$this,'add_scripts') ); add_action('admin_print_styles', array(&$this,'add_styles') ); } public function create_menu(){ add_menu_page('Site Options', 'Site Options', 'administrator', 'site-options', array(&$this,'settings'),$src = '',62); } public function register_settings(){ register_setting( 'starter_setting_group', 'starter' ); } public function add_styles(){ wp_enqueue_style('thickbox'); } public function add_scripts(){ wp_enqueue_script('thickbox'); wp_enqueue_script('meida-upload'); } public function settings(){ if(!current_user_can('manage_options')){ wp_die(__('You do not have sufficient permissions to access this page.')); } ?> <div class="wrap"> <h2>Site Options</h2> <form method="post" action="options.php"> <?php @settings_fields('starter_setting_group'); ?> <?php @do_settings_fields('starter_setting_group'); ?> <?php $content = get_option('starter'); ?> <table class="form-table"> <script> var count = 1; </script> <!-- loop --> <?php foreach($content['logo'] as $logo): ?> <tr> <th></th> <td> <input id="upload_image" type="text" size="36" name="starter[logo][]" value="<?php echo $logo; ?>" class="regular-text upload-image"/> <input id="upload_image_button" type="button" value="Upload Image" class="upload_image_button"/> <br />Enter an URL or upload an image for the banner. <br/> <?php if($logo): $url = $logo; ?> <img src="<?php echo $url; ?>" height="100" style="float:left"/> <?php endif; ?> <div id="temp"></div> </td> </tr> <?php endforeach; ?> <!-- loop end --> <div class="more-image"></div> <tr> <td> <input type="button" id="add-new-image" class="add-new-image" value="Add More"/> </td> </tr> </table> <?php @submit_button(); ?> <script language="JavaScript"> var formfield = ''; jQuery(document).ready(function() { jQuery('.add-new-image').on('click',function(){ var uploaded = jQuery('.upload-image'); var count = uploaded.length + 1; var to_rep = '<tr class="repetable-tr"><th scope="row"><label>Upload Logo</label></th><td><input id="upload_image_'+count+'" type="text" size="36" name="starter[logo][]" value="" class="regular-text upload-image"/><input id="upload_image_button_'+count+'" type="button" value="Upload Image" class="upload_image_button"/><br />Enter an URL or upload an image for the banner.<div id="temp"></div></td></tr>'; jQuery('.more-image').append(to_rep); }); jQuery('.upload_image_button').live('click',function() { formfield = jQuery(this).prev().attr('id'); tb_show('', 'media-upload.php?type=image&TB_iframe=true'); jQuery('#TB_iframeContent').css('width', '800px'); jQuery('#TB_window').css('width', '800px'); return false; }); window.send_to_editor = function(html) { imgurl = jQuery('img', html).attr('src'); jQuery('#'+formfield).val(imgurl); //jQuery('#temp').html('<img src="'+imgurl+'" width="200">'); tb_remove(); } }); </script> </form> </div> <?php } } $wp_site_option = new WP_Site_Option(); ?> поле <?php class WP_Site_Option{ function __construct(){ add_action('admin_init', array(&$this,'register_settings') ); add_action('admin_menu', array(&$this,'create_menu')); add_action('admin_print_scripts', array(&$this,'add_scripts') ); add_action('admin_print_styles', array(&$this,'add_styles') ); } public function create_menu(){ add_menu_page('Site Options', 'Site Options', 'administrator', 'site-options', array(&$this,'settings'),$src = '',62); } public function register_settings(){ register_setting( 'starter_setting_group', 'starter' ); } public function add_styles(){ wp_enqueue_style('thickbox'); } public function add_scripts(){ wp_enqueue_script('thickbox'); wp_enqueue_script('meida-upload'); } public function settings(){ if(!current_user_can('manage_options')){ wp_die(__('You do not have sufficient permissions to access this page.')); } ?> <div class="wrap"> <h2>Site Options</h2> <form method="post" action="options.php"> <?php @settings_fields('starter_setting_group'); ?> <?php @do_settings_fields('starter_setting_group'); ?> <?php $content = get_option('starter'); ?> <table class="form-table"> <script> var count = 1; </script> <!-- loop --> <?php foreach($content['logo'] as $logo): ?> <tr> <th></th> <td> <input id="upload_image" type="text" size="36" name="starter[logo][]" value="<?php echo $logo; ?>" class="regular-text upload-image"/> <input id="upload_image_button" type="button" value="Upload Image" class="upload_image_button"/> <br />Enter an URL or upload an image for the banner. <br/> <?php if($logo): $url = $logo; ?> <img src="<?php echo $url; ?>" height="100" style="float:left"/> <?php endif; ?> <div id="temp"></div> </td> </tr> <?php endforeach; ?> <!-- loop end --> <div class="more-image"></div> <tr> <td> <input type="button" id="add-new-image" class="add-new-image" value="Add More"/> </td> </tr> </table> <?php @submit_button(); ?> <script language="JavaScript"> var formfield = ''; jQuery(document).ready(function() { jQuery('.add-new-image').on('click',function(){ var uploaded = jQuery('.upload-image'); var count = uploaded.length + 1; var to_rep = '<tr class="repetable-tr"><th scope="row"><label>Upload Logo</label></th><td><input id="upload_image_'+count+'" type="text" size="36" name="starter[logo][]" value="" class="regular-text upload-image"/><input id="upload_image_button_'+count+'" type="button" value="Upload Image" class="upload_image_button"/><br />Enter an URL or upload an image for the banner.<div id="temp"></div></td></tr>'; jQuery('.more-image').append(to_rep); }); jQuery('.upload_image_button').live('click',function() { formfield = jQuery(this).prev().attr('id'); tb_show('', 'media-upload.php?type=image&TB_iframe=true'); jQuery('#TB_iframeContent').css('width', '800px'); jQuery('#TB_window').css('width', '800px'); return false; }); window.send_to_editor = function(html) { imgurl = jQuery('img', html).attr('src'); jQuery('#'+formfield).val(imgurl); //jQuery('#temp').html('<img src="'+imgurl+'" width="200">'); tb_remove(); } }); </script> </form> </div> <?php } } $wp_site_option = new WP_Site_Option(); ?>