Php WooCommerce PDF水印:使用自定义订单项目元数据

Php WooCommerce PDF水印:使用自定义订单项目元数据,php,wordpress,pdf,woocommerce,watermark,Php,Wordpress,Pdf,Woocommerce,Watermark,我在卖电子书,我在用一个自定义字段获取每个电子书的授权名称,因为这些电子书大部分是由老师代表学生购买的。每本电子书都会使用以下方法添加许可信息水印: 我还有一段代码,将同一产品的多个项目划分为单独的行项目: function split_product_individual_cart_items( $cart_item_data, $product_id ){ $ids = array(16786); if (!empty($product_id) && is_numer

我在卖电子书,我在用一个自定义字段获取每个电子书的授权名称,因为这些电子书大部分是由老师代表学生购买的。每本电子书都会使用以下方法添加许可信息水印:

我还有一段代码,将同一产品的多个项目划分为单独的行项目:

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 );
一切正常,我的订单完成页面如下所示:

我的测试电子书(ID 16786)的每个副本都会单独显示,并带有相关的许可证字段

然后我有下面的代码,它根据

问题是每个PDF都显示了所有3个名称,而每个可下载的电子书应该只授权给一个人:

是否有任何方法可以将每个自定义元字段与其对应的PDF进行匹配?也许是数数数组中的位置还是什么

或者,是否还有其他技巧可以更改已完成订单的产品名称,并在名称中包含自定义字段?然后可以将其包含在水印中,从而解决我的问题。

请尝试以下操作(在这里,我使用第四个变量函数参数
$product
从订单项中定位当前产品):

代码进入活动子主题(或活动主题)的functions.php文件。它可以工作


也许(不确定),您可以尝试替换以下行:

 $parsed_text = str_replace( '{licensed_to}', $replacement, $parsed_text );
与:


@谢谢你的回答,等我有时间的时候我会再看一遍。目前正在进行另一个项目。嘿@LoicTheAztec,我已经尝试了您建议的代码,但它仍然会导致相同的行为。不幸的是,这三个名字仍然印在每一本电子书上。
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;
}
 $parsed_text = str_replace( '{licensed_to}', $replacement, $parsed_text );
 $parsed_text = str_replace( '{licensed_to}', $replacement, $unparsed_text );