Создание PDF с использованием FPDF в WordPress Admin с Ajax - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь сгенерировать PDF-файл на экране администратора posts.php в Wordpress с помощью плагина FPDF. Я хочу передать идентификатор страницы из кнопки в функцию, которую я вызываю, поэтому я генерирую только PDF-файл с данными, относящимися к этой странице.

При нажатии на кнопку просто обновляется страница.

Может кто-нибудь помочь, пожалуйста?

JAVASCRIPT

function ajaxAddVehicleMeta() {

        var postid = jQuery('button[name="generate_posts_pdf"]').attr('id'); // select id of input change to whatever it actually is

        jQuery.ajax({
           type: 'POST',
                data: {
                    action: 'saveVeh',
                    postid: postid
                    },
                success: function(){

               },
           error: function(){

           }

        });
    }

PHP

$pdf = new PDF_HTML();

function my_enqueue($hook) {
    // Only add to the edit.php admin page.
    // See WP docs.
    if ('post.php' !== $hook) {
        return;
    }
    wp_enqueue_script('my_custom_script', plugin_dir_url(__FILE__) . 'js/main.js');
}

add_action('admin_enqueue_scripts', 'my_enqueue');

add_action( 'wp_ajax_saveVeh', 'saveVeh' );
add_action( 'wp_ajax_nopriv_saveVeh', 'saveVeh' );

function saveVeh() {

      $postid = 72;

        global $wpdb;

          if ( $wpdb->get_var( $wpdb->prepare( 'SELECT lottery_id FROM ' . $wpdb->prefix . 'wc_lottery_log WHERE lottery_id= %d', 72 ) ) ) {

          $log = $wpdb->get_results( $wpdb->prepare( 'SELECT * FROM ' . $wpdb->prefix . 'wc_lottery_log WHERE lottery_id=%d', 72 ) );

          global $pdf;
          $title_line_height = 10;
          $content_line_height = 8;
          $pdf->AddPage();
          $pdf->SetFont( 'Arial', '', 42 );
          $pdf->Write(20, 'Atomic Smash FPDF Tutorial');

          foreach( $log as $row ) {
              $pdf->SetFont( 'Arial', '', 22 );
              $pdf->Write($title_line_height, 'Test');
              // Add a line break
              $pdf->Ln(15);
              // Post Content
              $pdf->Ln(10);
              $pdf->SetFont( 'Arial', '', 12 );
              $pdf->WriteHTML($row->ticketid);
            }
        }
        header("Content-type:application/pdf");
        $pdf->Output('I','requerimiento_pdf.pdf');
        exit;

}

HTML

<button onclick="ajaxAddVehicleMeta()" id="<?php echo $post->ID; ?>" class="button button-primary" type="submit" name="generate_posts_pdf" value="generate">Generate PDF from Competiion Entries</button>

1 Ответ

0 голосов
/ 11 января 2019

Ваша кнопка внутри формы? Если это так, вам нужно использовать preventDefault(), чтобы он не выполнял действия по умолчанию (которое является обновлением).

HTML

<button onclick="ajaxAddVehicleMeta(event)" id="<?php echo $post->ID; ?>" class="button button-primary" type="submit" name="generate_posts_pdf" value="generate">Generate PDF from Competiion Entries</button>

JS

  function ajaxAddVehicleMeta(e) {
            e.preventDefault();
            var postid = jQuery('button[name="generate_posts_pdf"]').attr('id'); // select id of input change to whatever it actually is

            jQuery.ajax({
                type: 'POST',
                        data: {
                            action: 'saveVeh',
                            postid: postid
                            },
                        success: function(){

                    },
                error: function(){

                }

                });
        }
...