当前位置: 首页 > 面试题库 >

如果用户已经在Woocommerce中购买了当前产品,则显示自定义文本

蒋阳华
2023-03-14
问题内容

在woocommerce中,当客户已经购买了当前产品时,我使用wc_customer_bought_product()函数在单个产品页面中显示自定义文本消息。但我想检查购买的产品是否处于“已完成”状态的订单上。

除非满足以下条件,否则不应显示该消息:

1)用户已登录2)用户已经购买了产品3)当前产品的至少一个下订单已设置为完成(我不知道该如何完成)。

这是我的代码:

add_action( 'woocommerce_before_single_product_summary', 'woo_review_discount_message');
function woo_review_discount_message() {
    if ( is_user_logged_in() ) {
        global $product;

        $current_user = wp_get_current_user();

        if ( wc_customer_bought_product( $current_user->user_email, $current_user->ID, $product->get_id() && $order->status->complete ) ) 
            echo '<div class="user-bought"><span style="color:#CA364D;font-weight:bold;font-size:18px;"><i class="wishlist-icon icon-heart-o"></i></span> Hi ' . $current_user->first_name . '! Please write a review below.</a></div>';
    }
}

我尝试添加,&& $order->status->complete但是没有用。

任何帮助都将受到高度赞赏。


问题答案:

如果您 希望定位 具有完整状态的订单
,则可以基于wc_customer_bought_product()源代码使用以下自定义条件函数:

// Utility function to check if a customer has bought a product (Order with "completed" status only)
function customer_has_bought_product( $product_id, $user_id = 0 ) {
    global $wpdb;
    $customer_id = $user_id == 0 || $user_id == '' ? get_current_user_id() : $user_id;
    $status      = 'wc-completed';

    if( ! $customer_id )
        return false;

    // Count the number of products
    $count = $wpdb->get_var( "
        SELECT COUNT(woim.meta_value) FROM {$wpdb->prefix}posts AS p
        INNER JOIN {$wpdb->prefix}postmeta AS pm ON p.ID = pm.post_id
        INNER JOIN {$wpdb->prefix}woocommerce_order_items AS woi ON p.ID = woi.order_id
        INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS woim ON woi.order_item_id = woim.order_item_id
        WHERE p.post_status = '$status'
        AND pm.meta_key = '_customer_user'
        AND pm.meta_value = $customer_id
        AND woim.meta_key IN ('_product_id','_variation_id')
        AND woim.meta_value = $product_id
    " );

    // Return a boolean value if count is higher than 0
    return $count > 0 ? true : false;
}

add_action( 'woocommerce_before_single_product_summary', 'woo_review_discount_message');
function woo_review_discount_message() {
    global $product;

    if ( customer_has_bought_product( $product->get_id() ) && ! $product->is_type('variable') ) {
        $user = wp_get_current_user();
        echo '<div class="user-bought"><span style="color:#CA364D;font-weight:bold;font-size:18px;"><i class="wishlist-icon icon-heart-o"></i></span> Hi ' . $user->first_name . '! Please write a review below.</a></div>';
    }
}

代码进入活动子主题(或活动主题)的function.php文件中。经过测试和工作。

如果客户未登录,则不会显示任何内容。

像Woocommerce功能一样wc_customer_bought_product(),这不适用于可变产品的单个页面。



 类似资料:
  • 问题内容: 我想创建一个WooCommerce插件,为有购买历史记录的客户添加一些优惠。 如何检查用户之前购买过的东西? 谢谢。 问题答案: 是的,可以 创建一个 条件函数,当 客户已经完成至少一个订单 且状态 已完成 时 返回 该 条件函数 。 这是此条件函数的代码: 此代码已经过测试并且可以工作。 这段代码在您的活动子主题或主题的function.php文件中,或在插件php文件中。 用法 (

  • 问题内容: 我需要检查客户是否在WooCommerce之前购买了特定产品。 情况是这样的:除非他们较早购买了产品“ a”或“ b”,否则客户将不能购买产品“ c”,“ d”,“ e”。 如果客户较早购买了产品“ a”或“ b”,则激活产品“ c”,“ d”和“ e”的购买按钮,并允许他们购买产品。 如果他们之前没有购买过“ a”或“ b”,则将不允许他们购买“ c”,“ d”,“ e”,并且禁用了

  • 在开发一个将自定义产品添加到购物车的WooCommerce插件时,我正在使用函数内部的。但更新伍科姆尔斯到最新版本后,我收到了错误。 对不起,此产品无法购买。 因为在函数中,

  • 是否有一种方法可以在WooCommerce订单页面的每个产品下显示我的自定义SKU? 当我编辑产品时,自定义sku显示良好,但它不会显示在产品的订单页面中。我需要在订单上显示此信息,以便Zapier可以将其与产品的Visma帐户软件ArticleID匹配。 此尝试基于如何向WooCommerce产品添加(第二个)自定义sku字段的解决方案?

  • 在简短描述之前,我在WooCommerce中添加一个新字段时遇到了一个问题。 我使用脚本在和我的新自定义字段显示正确,但: 使用脚本时,简短描述消失,新字段显示良好。 我可以编辑产品页面上某个字段的内容,但不能删除它。它始终是最后一个值 如何显示此自定义字段而不删除产品简短说明? 如何重置此自定义字段内容? 这是我的代码: 负责显示的功能:

  • 我成功地在后端的产品变化中的WooCommerce中创建了一个ACF自定义字段。该字段在每个变化中正确显示。 但是在编辑变体中的此字段或其他字段后,我无法再保存整个变体选项卡。加载/保存指示器圆圈继续无限旋转。并且定制字段未显示在前端的单个产品变体中。 我所做的是将以下代码添加到我的: 任何帮助都将不胜感激。