AffiliateWP+WooCommerce:如何通过ID获取推广者昵称并展示
解决AffiliateWP推广者昵称(地点)在WooCommerce订单详情及邮件中显示的问题
你的思路方向是对的,但代码里缺少了获取当前订单对应推广者ID的关键步骤,导致get_affiliate_name拿不到有效数据,所以才显示空白。我来帮你修正并完善解决方案:
问题分析
你直接使用了未定义的$affiliate_id,且没有确保affiliate_wp()实例的正确调用逻辑。实际上AffiliateWP会把订单关联的推广者ID存在WooCommerce订单的元数据里,我们需要先从订单中取出这个ID,再去获取对应的推广者信息。
修正后的后台订单详情显示代码
这段代码会在后台订单页面的账单地址下方,显示推广者的昵称(也就是你设置的地点/地址):
add_action( 'woocommerce_admin_order_data_after_billing_address', 'display_affiliate_location_in_admin_order', 10, 1 ); function display_affiliate_location_in_admin_order( $order ) { // 从订单元数据中获取关联的推广者ID $affiliate_id = $order->get_meta( '_affiliate_wp_affiliate_id' ); // 确保推广者ID存在,且相关函数可用 if ( $affiliate_id && function_exists( 'affwp_get_affiliate_user_id' ) ) { // 通过推广者ID获取对应的WordPress用户ID $user_id = affwp_get_affiliate_user_id( $affiliate_id ); if ( $user_id ) { // 获取用户设置的昵称(即你的地点/地址信息) $affiliate_location = get_user_meta( $user_id, 'nickname', true ); if ( $affiliate_location ) { echo '<p><strong>' . esc_html__( '关联推广地点:', 'text-domain' ) . '</strong> ' . esc_html( $affiliate_location ) . '</p>'; } } } }
扩展:在订单邮件中同步显示推广者地点
如果需要在订单确认邮件等场景也展示这个信息,可以添加以下代码:
add_action( 'woocommerce_email_order_meta', 'display_affiliate_location_in_order_email', 10, 4 ); function display_affiliate_location_in_order_email( $order, $sent_to_admin, $plain_text, $email ) { $affiliate_id = $order->get_meta( '_affiliate_wp_affiliate_id' ); if ( $affiliate_id && function_exists( 'affwp_get_affiliate_user_id' ) ) { $user_id = affwp_get_affiliate_user_id( $affiliate_id ); if ( $user_id ) { $affiliate_location = get_user_meta( $user_id, 'nickname', true ); if ( $affiliate_location ) { // 适配纯文本和HTML邮件两种格式 if ( $plain_text ) { echo esc_html__( '关联推广地点:', 'text-domain' ) . ' ' . esc_html( $affiliate_location ) . "\n"; } else { echo '<p><strong>' . esc_html__( '关联推广地点:', 'text-domain' ) . '</strong> ' . esc_html( $affiliate_location ) . '</p>'; } } } } }
关键细节说明
- 安全获取推广者ID:
_affiliate_wp_affiliate_id是AffiliateWP存储订单关联推广者的标准元数据键,用$order->get_meta()获取更符合WooCommerce的规范。 - 关联用户ID:利用
affwp_get_affiliate_user_id()将推广者ID转为对应的WordPress用户ID,这也是你提供的官方函数里的核心方法。 - 精准获取地点信息:因为你把推广者的WordPress用户昵称设为了地点,所以直接通过
get_user_meta取出nickname字段就能拿到目标值。 - 安全输出:用
esc_html()和esc_html__()处理输出内容,避免XSS安全风险,同时支持多语言翻译。
你可以把代码添加到WordPress主题的functions.php文件中,或者使用自定义功能插件来保存,这样主题更新时不会丢失代码。
内容的提问来源于stack exchange,提问作者Nalakira
相关产品推荐
相关产品推荐

