by Anonymous » 21 Feb 2025, 22:15
Ich entwickle eine kleine Erweiterung für die Verwaltung von Gutscheinen in meinem WooCommerce -Store, ein benutzerdefiniertes Plugin mit einem PDF -Export. PDF ist leer. Ihr Konto und das erneute Laden Sie sie bei Bedarf erneut herunter. Beim Klicken wird eine PDF -Datei generiert und an den Kunden zurückgegeben. Dies funktioniert perfekt, wenn die Standardsprache meines Geschäfts verwendet wird, aber sobald ich auf Englisch wechsle (mit "/en/" in der URL) ist das zurückgegebene PDF leer.
Hier ist der Code für den Voucher -Abschnitt: < /p>
Code: Select all
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>
Und hier ist der Code für meine Funktion 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");
}
Wenn ich $ pdf vor der Ausgabe ein DIMPEN -DURCHEN, erhalte ich das vollständige FPDI -Objekt mit den richtigen Informationen: Die richtig hochgeladene PDF -Datei nach In die Sprache sowie die Daten des Kunden. keine Idee mehr haben, wo die Ausgabe könnte von.
Ich entwickle eine kleine Erweiterung für die Verwaltung von Gutscheinen in meinem WooCommerce -Store, ein benutzerdefiniertes Plugin mit einem PDF -Export. PDF ist leer. Ihr Konto und das erneute Laden Sie sie bei Bedarf erneut herunter. Beim Klicken wird eine PDF -Datei generiert und an den Kunden zurückgegeben. Dies funktioniert perfekt, wenn die Standardsprache meines Geschäfts verwendet wird, aber sobald ich auf Englisch wechsle (mit "/en/" in der URL) ist das zurückgegebene PDF leer.
Hier ist der Code für den Voucher -Abschnitt: < /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>
Und hier ist der Code für meine Funktion 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]
Wenn ich $ pdf vor der Ausgabe ein DIMPEN -DURCHEN, erhalte ich das vollständige FPDI -Objekt mit den richtigen Informationen: Die richtig hochgeladene PDF -Datei nach In die Sprache sowie die Daten des Kunden. keine Idee mehr haben, wo die Ausgabe könnte von.