Мне было интересно, можно ли вызвать wp-mpdf с php? Я думал о создании функции обратного вызова ajax для выбора (пользовательского) шаблона.
Возможно ли это? может быть с mpdf_exe c () или mpdf_output ()? mpdf_output () выглядит наиболее перспективным, так как вы можете установить путь к шаблону. Если вы можете сделать это, вам не нужно менять параметр БД: mpdf_theme.
Мой первый подход работает. Но это ужасно: он устанавливает новое значение в БД и затем запускает URL, чтобы получить pdf.
JS:
<script type="text/javascript">
jQuery(document).ready(function ($) {
$(".button-pdf-1").click(function (e) {
e.preventDefault();
var data = {
'action': 'my_action',
'post_id': <?php echo get_the_ID(); ?>,
'template': 'rtt_pdf_01'
};
getPdf(data);
});
$(".button-pdf-2").click(function (e) {
e.preventDefault();
var data = {
'action': 'my_action',
'post_id': <?php echo get_the_ID(); ?>,
'template': 'rtt_pdf_02'
};
getPdf(data);
});
function getPdf(data) {
jQuery.post(ajaxurl, data, function (response) {
let url = '<?php echo get_post_permalink( get_the_ID()); ?>?output=pdf';
window.location.href = url;
});
}
});
</script>
php:
add_action('wp_ajax_my_action', 'my_action');
function my_action()
{
update_option('mpdf_theme', $_POST['template']);
die();
}
——————-
Второй подход должен быть менее хакерским. Но я не заставляю его работать. Это текущий код: JS:
<script type="text/javascript">
jQuery(document).ready(function ($) {
$(".button-pdf-1").click(function (e) {
e.preventDefault();
var data = {
'action': 'my_action',
'post_id': <?php echo get_the_ID(); ?>,
'template': 'rtt_pdf_01'
};
getPdf(data);
});
$(".button-pdf-2").click(function (e) {
e.preventDefault();
var data = {
'action': 'my_action',
'post_id': <?php echo get_the_ID(); ?>,
'template': 'rtt_pdf_02'
};
getPdf(data);
});
function getPdf(data){
jQuery.post(ajaxurl, data, function (response) {
// Should I need this? Plus is this the best way?
var blob = new Blob([response]);
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = "FILENAME_TO_SAVE_WITH_EXTENSION.pdf";
link.click();
});
}
});
</script>
php обратный вызов:
add_action('wp_ajax_my_action', 'my_action');
function my_action()
{
global $post, $_GET;
// should I require this? Plus is there an easier way to get the path?
require_once( rtt_get_current_file_path(__DIR__) ."/../../../../plugins/wp-mpdf/wp-mpdf.php");
//catch current theme to reset it later
$currentPdfTheme = get_option('mpdf_theme');
// set it, since <code>mpdf_exec()</code> looks for it.
$_GET['output'] = 'pdf';
// set the desired template
update_option('mpdf_theme', $_POST['template']);
// to-do, somehow it fetches the first post instead of $_POST['post_id'] value
$arg = array(
'include' => [$_POST['post_id']],
);
$posts = get_posts( $arg );
foreach ( $posts as $post ) {
query_posts( 'p=' . $_POST['post_id'] );
// Approach 1
//mpdf_exec( 'false' );
// Approach 2
$pdf_output = '';
$outputToBrowser = true;
$pdfName = 'Export_' . get_the_title(); //could also get slug
$templatePath = ''; // ? Do I need to set this? Also, I can maybe use this so I dont have to change DB option <code>mpdf_theme</code>?
mpdf_output( $pdf_output, true, $outputToBrowser, $pdfName, $templatePath );
}
//reset original theme
update_option('mpdf_theme', $currentPdfTheme);
die();
}
Я на правильном пути? Как я могу успешно получить PDF с php и вернуть / загрузить его на стороне клиента?