Intereting Posts
Не работает система Cron Работа над исправлением wp-front-end-редактора, столкнувшись с неопределенным индексом Панель администратора пуста после изменения в домене После импорта медиа не прикрепляется Получить текущую таксономию и отобразить запрос соответственно Функция WordPress, например, is_category для подкатегории? is_subcategory? Каков правильный способ включения файлов в WordPress TwentyTen с собственными сценариями jquery и css? Использовать одиночную запись блога в качестве главной страницы сайта без перенаправления WordPress переводит динамически сгенерированные домашние страницы Как сохранить параметры url все время, когда пользователь просматривает мой сайт? Отредактированные файлы темы обновляются / возвращаются каждый так часто Multisite «Пропустить подтверждение электронной почты» Выход из системы opcache_reset для обновления плагина / темы / ядра Разбивка страниц выполняется везде, но указательная страница Пользовательская категория не найдена

Как добавить пользовательскую панель загрузки метаданных в продукты WooCommerce (и опубликовать ссылку на интерфейс)

Я попытался сделать несколько разных способов. Текущий способ, которым я обладаю функциональностью, отлично работает, но НЕ использует WP Media Uploader (что позволяет находить 1600+ файлов PDF на сайте для загрузки громоздких). Недавно я нашел приведенный ниже фрагмент кода и настроил его для работы с продуктами WooCommerce.

Единственная проблема заключается в том, что я не могу понять, как позвонить, чтобы URL-адрес PDF-файла был загружен с помощью мета-поля, представленного на интерфейсе, в виде ссылки (т.е. нажмите здесь, чтобы загрузить товарный лист).

Любая помощь будет принята с благодарностью.

/* PDF Tear Sheet on Product Pages */ //Add Metabox add_action('add_meta_boxes', 'add_upload_file_metaboxes'); function add_upload_file_metaboxes() { add_meta_box('swp_file_upload', 'File Upload', 'swp_file_upload', 'product', 'normal', 'default'); } function swp_file_upload() { global $post; // Noncename needed to verify where the data originated echo '<input type="hidden" name="tearsheetmeta_noncename" id="tearsheetmeta_noncename" value="'. wp_create_nonce(plugin_basename(__FILE__)). '" />'; global $wpdb; $strFile = get_post_meta($post -> ID, $key = 'tearsheet_file', true); $media_file = get_post_meta($post -> ID, $key = '_wp_attached_file', true); if (!empty($media_file)) { $strFile = $media_file; } ?> <script type = "text/javascript"> // Uploading files var file_frame; jQuery('#upload_image_button').live('click', function(product) { podcast.preventDefault(); // If the media frame already exists, reopen it. if (file_frame) { file_frame.open(); return; } // Create the media frame. file_frame = wp.media.frames.file_frame = wp.media({ title: jQuery(this).data('uploader_title'), button: { text: jQuery(this).data('uploader_button_text'), }, multiple: false // Set to true to allow multiple files to be selected }); // When a file is selected, run a callback. file_frame.on('select', function(){ // We set multiple to false so only get one image from the uploader attachment = file_frame.state().get('selection').first().toJSON(); // here are some of the variables you could use for the attachment; //var all = JSON.stringify( attachment ); //var id = attachment.id; //var title = attachment.title; //var filename = attachment.filename; var url = attachment.url; //var link = attachment.link; //var alt = attachment.alt; //var author = attachment.author; //var description = attachment.description; //var caption = attachment.caption; //var name = attachment.name; //var status = attachment.status; //var uploadedTo = attachment.uploadedTo; //var date = attachment.date; //var modified = attachment.modified; //var type = attachment.type; //var subtype = attachment.subtype; //var icon = attachment.icon; //var dateFormatted = attachment.dateFormatted; //var editLink = attachment.editLink; //var fileLength = attachment.fileLength; var field = document.getElementById("tearsheet_file"); field.value = url; //set which variable you want the field to have }); // Finally, open the modal file_frame.open(); }); </script> <div> <table> <tr valign = "top"> <td> <input type = "text" name = "tearsheet_file" id = "tearsheet_file" size = "70" value = "<?php echo $strFile; ?>" /> <input id = "upload_image_button" type = "button" value = "Upload"> </td> </tr> </table> <input type = "hidden" name = "img_txt_id" id = "img_txt_id" value = "" /> </div> <?php function admin_scripts() { wp_enqueue_script('media-upload'); wp_enqueue_script('thickbox'); } function admin_styles() { wp_enqueue_style('thickbox'); } add_action('admin_print_scripts', 'admin_scripts'); add_action('admin_print_styles', 'admin_styles'); } //Saving the file function save_tearsheet_meta($post_id, $post) { // verify this came from the our screen and with proper authorization, // because save_post can be triggered at other times if (!wp_verify_nonce($_POST['tearsheetmeta_noncename'], plugin_basename(__FILE__))) { return $post -> ID; } // Is the user allowed to edit the post? if (!current_user_can('edit_post', $post -> ID)) return $post -> ID; // We need to find and save the data // We'll put it into an array to make it easier to loop though. $tearsheet_meta['tearsheet_file'] = $_POST['tearsheet_file']; // Add values of $tearsheet_meta as custom fields foreach($tearsheet_meta as $key => $value) { if ($post -> post_type == 'revision') return; $value = implode(',', (array) $value); if (get_post_meta($post -> ID, $key, FALSE)) { // If the custom field already has a value it will update update_post_meta($post -> ID, $key, $value); } else { // If the custom field doesn't have a value it will add add_post_meta($post -> ID, $key, $value); } if (!$value) delete_post_meta($post -> ID, $key); // Delete if blank value } } add_action('save_post', 'save_tearsheet_meta', 1, 2); // save the custom fields 

Самый простой способ сделать это – с помощью плагина. Я использую ACF ( Advanced Custom Fields ) для создания мета-окна, который заботится обо всех тяжелых занятиях и отображает хороший обмен на экране редактирования продукта. Затем я добавляю функцию на свой шаблон для одного продукта, чтобы отобразить ссылку в формате PDF, которая может быть выполнена с использованием функции или внутри самого шаблона, где это необходимо. Используя некоторую условную логику, ссылка PDF отображается только в том случае, если она есть 🙂

Вот фрагмент для настраиваемого поля:

 $pdf_media_file = get_post_meta( $post_id, 'pdf_media_file', true); if(isset($pdf_media_file) && !empty($pdf_media_file)){ $pdf_file = wp_get_attachment_url($pdf_media_file); } 

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

 <a href="<?php echo $pdf_file; ?>">View the PDF</a> 

У WordPress теперь есть генератор изображений в формате PDF, поэтому вы также можете повеселиться, используя миниатюру PDF в медиатеке.