Anonymous
Моя учетная запись пользовательского PDF -экспорта на нескольких языках
Сообщение
Anonymous » 24 фев 2025, 15:35
Я разрабатываю небольшое расширение для управления ваучерами в моем магазине Woocommerce, пользовательском плагине с экспортом PDF. PDF пуст. С момента создания их учетной записи и повторной загрузки их, если это необходимо. При нажатии на клиент генерируется и возвращается файл PDF. Это отлично работает при использовании языка по умолчанию моего магазина, но как только я переключаюсь на английский (с «/en/" в URL), возвращаемый PDF пуст.
Здесь Код для разделения ваучеров: < /p>
Код: Выделить всё
function display_vouchers_in_dashboard()
{
$user_id = get_current_user_id();
if ($user_id > 0)
{
$args = array(
'customer_id' => $user_id,
'post_type' => 'shop_order',
'posts_per_page' => -1,
);
$orders = wc_get_orders($args);
$voucher_found = false;
if ($orders)
{
echo 'Vos Vouchers';
echo '';
echo 'Date d\'achatMontantÀ l\'attention deRéférenceAction';
echo '';
foreach ($orders as $order)
{
foreach ($order->get_items() as $item_id => $item)
{
$product = $item->get_product();
if ($product)
{
$categories = wp_get_post_terms($product->get_id(), 'product_cat');
foreach ($categories as $category)
{
if ($category->slug === 'bons-cadeaux')
{
$voucher_reference = wc_get_order_item_meta($item_id, '_voucher_reference', true);
$recipient_name = wc_get_order_item_meta($item_id, '_gift_card_recipient', true);
$voucher_amount = $item->get_total();
$order_date = $order->get_date_created()->date('Y-m-d');
if (!empty($voucher_reference) && !empty($recipient_name))
{
$voucher_found = true;
echo '';
echo '' . esc_html($order_date) . '';
echo '' . wc_price($voucher_amount) . '';
echo '' . esc_html($recipient_name) . '';
echo '' . esc_html($voucher_reference) . '';
echo '';
echo '';
echo '';
echo '';
echo '';
echo 'Télécharger';
echo '';
echo '';
echo '';
}
}
}
}
}
}
echo '';
echo '';
}
if (!$voucher_found)
{
echo '
Vous n\'avez pas encore acheté de vouchers.
[url=https://radici.lu/boutique/]Parcourir les produits[/url]
';
}
}
}
add_action('woocommerce_account_vouchers_endpoint', 'display_vouchers_in_dashboard');
function process_voucher_download()
{
if (isset($_POST['action']) && $_POST['action'] === 'download_voucher' && isset($_POST['order_id']) && isset($_POST['item_id']))
{
$order_id = absint($_POST['order_id']);
$item_id = absint($_POST['item_id']);
$user_id = get_current_user_id();
$order = wc_get_order($order_id);
if ($order && $order->get_user_id() === $user_id)
{
generate_pdf($order_id, $item_id);
exit;
} else {
wp_redirect(home_url('/404'));
exit;
}
}
}
add_action('template_redirect', 'process_voucher_download');
< /code>
А вот код для моей функции Generate_pdf: < /p>
function generate_pdf($order_id, $item_id)
{
$order = wc_get_order($order_id);
$current_user = wp_get_current_user();
$language = get_locale();
if ($order->get_user_id() != $current_user->ID)
{
wp_die('You are not authorized to generate vouchers for this order');
}
$item = $order->get_item($item_id);
$product_id = $item->get_product_id();
$pdf = new Fpdi();
if ($language === "en_GB")
{
$pdf->setSourceFile(plugin_dir_path(__FILE__) . 'template_voucher_en.pdf');
$tplIdx = $pdf->importPage(1);
if (has_term('bons-cadeaux', 'product_cat', $product_id))
{
$recipient_name = $item->get_meta('_gift_card_recipient', true);
$reference = $item->get_meta('_voucher_reference', true);
$sender_name = $order->get_billing_first_name() . ' ' . $order->get_billing_last_name();
$pdf->AddPage('L');
$pdf->useTemplate($tplIdx);
$pdf->SetFont('Helvetica', '', 14);
$pdf->SetXY(52.5, 13.5);
$pdf->Write(0, $reference);
$pdf->SetXY(93, 136.5);
$pdf->Write(0, $item->get_total() . '€');
$pdf->SetXY(118, 147);
$pdf->Write(0, $recipient_name);
$pdf->SetXY(87.5, 157.5);
$pdf->Write(0, $sender_name);
$pdf->SetXY(103, 168);
$pdf->Write(0, date('d/m/Y', strtotime('+1 year', strtotime($order->get_date_created()))));
}
} else {
$pdf->setSourceFile(plugin_dir_path(__FILE__) . 'template_voucher_fr.pdf');
$tplIdx = $pdf->importPage(1);
if (has_term('bons-cadeaux', 'product_cat', $product_id))
{
$recipient_name = $item->get_meta('_gift_card_recipient', true);
$reference = $item->get_meta('_voucher_reference', true);
$sender_name = $order->get_billing_first_name() . ' ' . $order->get_billing_last_name();
$pdf->AddPage('L');
$pdf->useTemplate($tplIdx);
$pdf->SetFont('Helvetica', '', 14);
$pdf->SetXY(53, 13.5);
$pdf->Write(0, $reference);
$pdf->SetXY(94.5, 136.5);
$pdf->Write(0, $item->get_total() . '€');
$pdf->SetXY(109, 147);
$pdf->Write(0, $recipient_name);
$pdf->SetXY(104, 157.5);
$pdf->Write(0, $sender_name);
$pdf->SetXY(109.5, 168);
$pdf->Write(0, date('d/m/Y', strtotime('+1 year', strtotime($order->get_date_created()))));
}
}
return $pdf->Output("voucher_".$reference.".pdf", "D");
}
Когда я сбрасываю $ pdf перед выводом, будь то на французском или английском на язык, а также данные клиента. не иметь больше представления, где проблема может исходить от.
Подробнее здесь:
https://stackoverflow.com/questions/794 ... -languages
1740400538
Anonymous
Я разрабатываю небольшое расширение для управления ваучерами в моем магазине Woocommerce, пользовательском плагине с экспортом PDF. PDF пуст. С момента создания их учетной записи и повторной загрузки их, если это необходимо. При нажатии на клиент генерируется и возвращается файл PDF. Это отлично работает при использовании языка по умолчанию моего магазина, но как только я переключаюсь на английский (с «/en/" в URL), возвращаемый PDF пуст. Здесь Код для разделения ваучеров: < /p> [code]function display_vouchers_in_dashboard() { $user_id = get_current_user_id(); if ($user_id > 0) { $args = array( 'customer_id' => $user_id, 'post_type' => 'shop_order', 'posts_per_page' => -1, ); $orders = wc_get_orders($args); $voucher_found = false; if ($orders) { echo 'Vos Vouchers'; echo ''; echo 'Date d\'achatMontantÀ l\'attention deRéférenceAction'; echo ''; foreach ($orders as $order) { foreach ($order->get_items() as $item_id => $item) { $product = $item->get_product(); if ($product) { $categories = wp_get_post_terms($product->get_id(), 'product_cat'); foreach ($categories as $category) { if ($category->slug === 'bons-cadeaux') { $voucher_reference = wc_get_order_item_meta($item_id, '_voucher_reference', true); $recipient_name = wc_get_order_item_meta($item_id, '_gift_card_recipient', true); $voucher_amount = $item->get_total(); $order_date = $order->get_date_created()->date('Y-m-d'); if (!empty($voucher_reference) && !empty($recipient_name)) { $voucher_found = true; echo ''; echo '' . esc_html($order_date) . ''; echo '' . wc_price($voucher_amount) . ''; echo '' . esc_html($recipient_name) . ''; echo '' . esc_html($voucher_reference) . ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo 'Télécharger'; echo ''; echo ''; echo ''; } } } } } } echo ''; echo ''; } if (!$voucher_found) { echo ' Vous n\'avez pas encore acheté de vouchers. [url=https://radici.lu/boutique/]Parcourir les produits[/url] '; } } } add_action('woocommerce_account_vouchers_endpoint', 'display_vouchers_in_dashboard'); function process_voucher_download() { if (isset($_POST['action']) && $_POST['action'] === 'download_voucher' && isset($_POST['order_id']) && isset($_POST['item_id'])) { $order_id = absint($_POST['order_id']); $item_id = absint($_POST['item_id']); $user_id = get_current_user_id(); $order = wc_get_order($order_id); if ($order && $order->get_user_id() === $user_id) { generate_pdf($order_id, $item_id); exit; } else { wp_redirect(home_url('/404')); exit; } } } add_action('template_redirect', 'process_voucher_download'); < /code> А вот код для моей функции Generate_pdf: < /p> function generate_pdf($order_id, $item_id) { $order = wc_get_order($order_id); $current_user = wp_get_current_user(); $language = get_locale(); if ($order->get_user_id() != $current_user->ID) { wp_die('You are not authorized to generate vouchers for this order'); } $item = $order->get_item($item_id); $product_id = $item->get_product_id(); $pdf = new Fpdi(); if ($language === "en_GB") { $pdf->setSourceFile(plugin_dir_path(__FILE__) . 'template_voucher_en.pdf'); $tplIdx = $pdf->importPage(1); if (has_term('bons-cadeaux', 'product_cat', $product_id)) { $recipient_name = $item->get_meta('_gift_card_recipient', true); $reference = $item->get_meta('_voucher_reference', true); $sender_name = $order->get_billing_first_name() . ' ' . $order->get_billing_last_name(); $pdf->AddPage('L'); $pdf->useTemplate($tplIdx); $pdf->SetFont('Helvetica', '', 14); $pdf->SetXY(52.5, 13.5); $pdf->Write(0, $reference); $pdf->SetXY(93, 136.5); $pdf->Write(0, $item->get_total() . '€'); $pdf->SetXY(118, 147); $pdf->Write(0, $recipient_name); $pdf->SetXY(87.5, 157.5); $pdf->Write(0, $sender_name); $pdf->SetXY(103, 168); $pdf->Write(0, date('d/m/Y', strtotime('+1 year', strtotime($order->get_date_created())))); } } else { $pdf->setSourceFile(plugin_dir_path(__FILE__) . 'template_voucher_fr.pdf'); $tplIdx = $pdf->importPage(1); if (has_term('bons-cadeaux', 'product_cat', $product_id)) { $recipient_name = $item->get_meta('_gift_card_recipient', true); $reference = $item->get_meta('_voucher_reference', true); $sender_name = $order->get_billing_first_name() . ' ' . $order->get_billing_last_name(); $pdf->AddPage('L'); $pdf->useTemplate($tplIdx); $pdf->SetFont('Helvetica', '', 14); $pdf->SetXY(53, 13.5); $pdf->Write(0, $reference); $pdf->SetXY(94.5, 136.5); $pdf->Write(0, $item->get_total() . '€'); $pdf->SetXY(109, 147); $pdf->Write(0, $recipient_name); $pdf->SetXY(104, 157.5); $pdf->Write(0, $sender_name); $pdf->SetXY(109.5, 168); $pdf->Write(0, date('d/m/Y', strtotime('+1 year', strtotime($order->get_date_created())))); } } return $pdf->Output("voucher_".$reference.".pdf", "D"); } [/code] Когда я сбрасываю $ pdf перед выводом, будь то на французском или английском на язык, а также данные клиента. не иметь больше представления, где проблема может исходить от. Подробнее здесь: [url]https://stackoverflow.com/questions/79457938/my-account-custom-pdf-export-in-multiple-languages[/url]