
本教程旨在详细指导如何在woocommerce的“感谢页”中安全有效地获取订单详情,并将其动态嵌入到javascript代码中,以便将数据发送至第三方营销或分析系统。文章将重点介绍使用wordpress动作钩子`wp_footer`的正确方法,并提供处理单个或多个订单商品的代码示例,确保数据准确无误地传递。
在现代电商运营中,将WooCommerce订单数据实时同步到第三方营销、联盟或分析平台是常见的需求。这通常需要在用户完成购买后的“感谢页”上执行一段JavaScript代码,并将订单ID、总金额、商品信息等动态数据传递给该脚本。然而,直接在页面内容中嵌入PHP代码或使用不当的钩子,可能导致数据无法正确获取或脚本无法执行。本文将提供一种稳健且专业的解决方案。
当用户在WooCommerce完成订单后,系统会跳转到一个特殊的“感谢页”。这个页面的URL通常包含订单ID,例如 yourdomain.com/checkout/order-received/1234/?key=wc_order_xxxxxx。WooCommerce通过order-received这个查询变量来识别当前页面对应的订单。要正确获取订单数据,我们需要利用这个查询变量。
许多开发者在尝试实现此功能时,可能会遇到以下问题:
最推荐且最稳健的方法是利用WordPress的动作钩子(Action Hooks),将PHP代码与JavaScript脚本结合,动态生成包含订单数据的脚本。wp_footer钩子是一个理想的选择,它会在页面</body>标签之前执行,确保所有HTML内容都已加载,并且不会阻塞页面渲染。
立即学习“Java免费学习笔记(深入)”;
我们将创建一个PHP函数,该函数将负责:
以下是实现此功能的PHP代码:
<?php
/**
* 在WooCommerce感谢页嵌入营销追踪脚本并传递订单详情
*/
add_action( 'wp_footer', 'embed_marketing_script_with_order_details', 5 );
function embed_marketing_script_with_order_details() {
global $wp;
// 检查当前页面是否为WooCommerce的订单接收(感谢)页面
if ( isset( $wp->query_vars['order-received'] ) ) :
// 获取订单ID
$order_id = absint( $wp->query_vars['order-received'] );
// 获取WC_Order对象
$order = wc_get_order( $order_id );
// 确保订单对象有效
if ( ! $order ) {
return; // 如果订单无效,则停止执行
}
// 获取所有订单商品
$order_items = $order->get_items();
// 初始化用于存储商品ID和名称的数组
$product_ids = $product_names = array();
// 遍历订单商品,提取ID和名称
foreach ( $order_items as $order_item ) {
$product_ids[] = $order_item->get_product_id();
$product_names[] = $order_item->get_name();
}
// 将商品ID和名称数组转换为以 "|" 分隔的字符串
// 如果第三方系统需要不同的分隔符,请在此处修改
$product_ids_string = implode( '|', $product_ids );
$product_names_string = implode( '|', $product_names );
?>
<script id="wc-checkout-custom-tracking" type="text/javascript">
var oeyaPostParam = {
code : '', // 固定值或无需填充
cookie_name : '', // 固定值或无需填充
mcode : '', // 固定值或无需填充
oid : '<?php echo esc_js( $order->get_order_number() ); ?>', // 订单号
amount : '<?php echo esc_js( $order->get_total() ); ?>', // 订单总金额
bid : '', // 固定值或无需填充
gno : '<?php echo esc_js( $product_ids_string ); ?>', // 商品ID字符串 (多个商品用'|'分隔)
gname : '<?php echo esc_js( $product_names_string ); ?>', // 商品名称字符串 (多个商品用'|'分隔)
unit : ' ', // 固定值或无需填充
odate : '<?php echo esc_js( $order->get_date_created()->format('Y-m-d H:i:s') ); ?>', // 订单创建时间
};
(function() {
var oeyasc = document.createElement('script');
oeyasc.type = 'text/javascript';
oeyasc.async = true; // 异步加载脚本
oeyasc.src = 'https://www.conn.tw/track/oeya_jss2s_v1.0.js'; // 第三方追踪脚本URL
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(oeyasc, s);
})();
</script>
<?php
endif;
}将上述PHP代码添加到您的WordPress网站有以下两种推荐方式:
使用Code Snippets插件(推荐):
添加到主题的functions.php文件:
通过利用WordPress的动作钩子wp_footer,结合WooCommerce的wc_get_order()函数,我们可以安全、高效地在感谢页中获取订单详情,并将其动态嵌入到JavaScript追踪脚本中。这种方法避免了直接在页面内容中混合PHP和HTML可能带来的问题,提供了更清晰、更易于维护的代码结构,是实现此类功能的最佳实践。
以上就是在WooCommerce感谢页嵌入订单详情并传递给JavaScript的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号