автоматически загружать сгенерированный pdf из href - PullRequest
1 голос
/ 26 февраля 2020

Я действительно расстроен, у меня нет решения для этого.

У меня есть следующий код в php.

Все, что я хочу, - это сгенерированный pdf, который доступен при нажатии на ссылку для автоматической загрузки после его генерации.

Как вы можете видеть, я пробовал несколько вещей, но я не понимаю

, чтобы подвести итог :

Я хочу, чтобы файл pdf, который отображается после нажатия на эту ссылку <a href="'.get_home_url().'/?dpd_id='.$label_number.'" download>Click here to download PDF</a>, загружался автоматически без необходимости щелкать по нему.

Кто-нибудь может мне помочь?

// Make the action from selected orders
add_filter( 'handle_bulk_actions-edit-shop_order', 'dpd_handle_bulk_generate_labels', 10, 3 );
function dpd_handle_bulk_generate_labels( $redirect_to, $action, $post_ids ) {
    if ( $action !== 'dpd_bulk_create_label' )
        return $redirect_to; // Exit

    global $attach_download_dir, $attach_download_file; // ???

    $success_ids = array();
    $failed_ids = array();

    $messages = array();
    echo "
Post ID: "; echo ""; print_r($post_ids); echo "
"; foreach ($ post_ids как $ post_id) {$ response_error = create_label ($ post_id, 'return'); if (! $ Response_error) {$ success_ids [] = $ post_id;} else {$ failed_ids [] = $ post_id;} $ order = wc_get_order ($ post_id); $ order_data = $ order-> get_data (); // Ваш код будет выполняться для каждого выбранного порядка fwrite ($ myfile, $ order_data ['date_created'] -> дата ('d / M / Y'). ';'. '#'. (($ order-> get_type () === 'shop_order')? $ order-> get_id (): $ order-> get_parent_id ()). ';'. '#'. $ order-> get_id ()); $ processing_ids [] = $ post_id; $ messages [] = "Сгенерированная этикетка доставки для идентификатора заказа:". $ post_id;} $ msg = implode ("
", $ messages); эхо "
MSG:". $ msg; новое DPD_notify ($ msg, "note note-success"); // выход; возврат $ redirect_to; возврат $ redirect_to = add_query_arg (массив ('write_downloads' => '1', 'sids' => implode (',', $ success_ids), 'fids' => implode (',', $ failed_ids),), $ redirect_to) ;} $ ch = curl_init (); $ source = "'.get_home_url ().' /? dpd_id = '. $ label_number.'"; curl_se topt ($ ch, CURLOPT_URL, $ source); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); $ data = curl_exe c ($ ch); curl_close ($ ch); $ destination = "'download.pdf"; $ file = fopen ($ destination, "w +"); fputs ($ file, $ data); fclose ($ файла); function dpd_label_on_order_status_completed ($ order_id) {$ auto_generate_shipping_label = ice_get_option ('dpd_auto_generate_shipping_label_o c', 'dpd_options'); if ($ auto_generate_shipping_label) create_label ($ order_id, 'return'); } add_action ('woocommerce_order_status_completed', 'dpd_label_on_order_status_completed', 10, 1); function get_order_shipping_label_number ($ order_id) {$ label_number = 0; if ($ order_id) {global $ wpdb; $ table_name = $ wpdb-> prefix.'dpd_orders '; $ parcels = $ wpdb-> get_results ("SELECT id, parcel_number, date FROM $ table_name WHERE order_id = $ order_id AND (order_type! = 'amazon_prime' OR order_type IS NULL) AND status! = 'tra sh'"); if (count ($ parcels)> 0) {if (isset ($ parcels [0] -> id)) {$ label_number = $ parcels [0] -> id; }}} return $ label_number; } // Уведомление о результатах массового действия с заказами add_action ('admin_notices', 'downloads_bulk_action_admin_notice'); function downloads_bulk_action_admin_notice () {$ success_ids = ''; if (isset ($ _ REQUEST ['sids'])) $ success_ids = $ _REQUEST ['sids']; $ failed_ids = ''; if (isset ($ _ REQUEST ['fids'])) $ failed_ids = $ _REQUEST ['fids']; if ($ success_ids) {echo '
'; echo "Успешно сгенерированная метка для следующих заказов:"; $ success_ids_array = explode (",", $ success_ids); if (is_array ($ success_ids_array) и sizeof ($ success_ids_array)) {foreach ($ success_ids_array как $ success_id) {$ label_number = get_order_shipping_label_number ($ success_id); echo '
Идентификатор заказа:'. $ success_id. ' - Click here to download PDF; } } if($failed_ids) { echo "
Failed generating Labels for following Order numbers: ".$failed_ids; } } function dpd_wc_add_label_pdf_column_header( $columns ) { $new_columns = array(); foreach ( $columns as $column_name => $column_info ) { $new_columns[ $column_name ] = $column_info; if ( 'order_total' === $column_name ) { $new_columns['shipping_label'] = __( 'Shipping Label', 'my-textdomain' ); } } return $new_columns; } add_filter( 'manage_edit-shop_order_columns', 'dpd_wc_add_label_pdf_column_header', 20 ); function dpd_wc_add_label_pdf_column_content( $column ) { global $post; if ( 'shipping_label' === $column ) { $label_number = get_order_shipping_label_number($post->ID); if($label_number) echo ' Скачать PDF '. Trigger («клик»); file_put_contents ("download.pdf", fopen ("'. get_home_url ().' /? dpd_id = '. $ label_number.'", 'r')); }} add_action ('manage_shop_order_posts_custom_column', 'dpd_wc_add_label_pdf_column_content'); ?>

1 Ответ

1 голос
/ 26 февраля 2020

Во-первых, вам нужно установить HTTP-заголовок Content-Disposition: Attachment в сгенерированном PDF-файле. Вам нужно будет изменить код генерации PDF для этого. В противном случае приведенный ниже метод приведет к отображению только PDF-файла (он не будет загружен автоматически).

После того, как это будет сделано, создайте ссылку на сгенерированный файл PDF в теге HTML <head> следующим образом. :

<meta http-equiv="refresh" content="0; url=<?= get_home_url().'/?dpd_id='.$label_number ?> />

Если путь к PDF-файлу является относительным, перед URL-адресом в поле url= добавьте ./.

Убедитесь, что указан label_number каким-либо образом, , иначе ваше приложение будет уязвимо для уязвимости безопасности, связанной с непроверенными перенаправлениями. Я также рекомендовал бы сохранить ссылку на файл PDF где-нибудь на странице, если загрузка по какой-либо причине не начинается автоматически.

См. Также Как автоматически загрузить PDF? и Meta refre sh скачать (txt, ini, css или html) файл .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...