gpt4 book ai didi

php - WooCommerce PDF 水印 : Using custom order item meta data

转载 作者:行者123 更新时间:2023-12-03 18:52:29 24 4
gpt4 key购买 nike

我正在销售电子书,并且我正在捕获一个名称以使用自定义字段为每本电子书授权,因为电子书主要由教师代表学生购买。每本电子书都使用 WooCommerce PDF Watermark 带有许可信息水印
我还有一段代码将同一产品的多个项目分成单独的行项目:

function split_product_individual_cart_items( $cart_item_data, $product_id ){
$ids = array(16786);
if (!empty($product_id) && is_numeric($product_id) && in_array((int)$product_id, $ids)) {
$unique_cart_item_key = uniqid();
$cart_item_data['unique_key'] = $unique_cart_item_key;
}
return $cart_item_data;
}
add_filter( 'woocommerce_add_cart_item_data', 'split_product_individual_cart_items', 10, 2 );
这一切正常,我的订单完整页面如下所示:
enter image description here
我的测试电子书 (ID 16786) 的每个副本都单独显示,并带有关联的 license_to 字段。
然后我有以下代码根据 developer's docs here 将自定义字段添加到 PDF 中
function wc_pdf_watermark_extend_template_tags( $parsed_text, $unparsed_text, $order, $product ) {

$licensed_to_string = ' ';
$order_items_array = $order->get_items();

foreach ( $order_items_array as $item_id => $item ) {
$product_id = $item->get_product_id();
$licensed_to = $item->get_meta( 'licensed_to', true );
$licensed_to_string .= $product_id . ' - ' . $item_id . ' - ' . $licensed_to . ' | ';
}

$parsed_text = str_replace( '{licensed_to}', $licensed_to_string, $parsed_text );

return $parsed_text;

}
add_filter( 'woocommerce_pdf_watermark_parse_template_tags', 'wc_pdf_watermark_extend_template_tags', 10, 4 );
问题是每个 PDF 都显示了所有 3 个名字,而每个可下载的电子书应该只授权给一个人:
enter image description here
有什么办法可以以某种方式将每个自定义元字段与其对应的 PDF 匹配?也许计算数组中的位置或其他什么?
或者,是否还有其他技巧可以更改已完成订单的产品名称,并在名称中包含自定义字段?然后可以将其包含在水印中并解决我的问题。

最佳答案

请尝试以下操作(我使用第 4 个变量函数参数 $product 来定位订单项中的当前产品):

add_filter( 'woocommerce_pdf_watermark_parse_template_tags', 'wc_pdf_watermark_extend_template_tags', 10, 4 );
function wc_pdf_watermark_extend_template_tags( $parsed_text, $unparsed_text, $order, $product ) {
// Loop through order items
foreach ( $order->get_items() as $item_id => $item ) {
// Target only current product
if( in_array( $product->get_id(), [$item->get_product_id(), $item->get_variation_id()] ) ) {
$product_id = $item->get_product_id();
$licensed_to = $item->get_meta('licensed_to');
$replacement = $product_id . ' - ' . $item_id . ' - ' . $licensed_to;
$parsed_text = str_replace( '{licensed_to}', $replacement, $parsed_text );
}
}
return $parsed_text;
}
代码位于事件子主题(或事件主题)的 functions.php 文件中。它可以工作。

也许(不确定),您可以尝试替换以下行:
 $parsed_text = str_replace( '{licensed_to}', $replacement, $parsed_text );
和:
 $parsed_text = str_replace( '{licensed_to}', $replacement, $unparsed_text );

关于php - WooCommerce PDF 水印 : Using custom order item meta data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66679793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com