检查客户是否对Woocommerce中的产品进行了评论

用户名

此代码将检查客户是否已登录,他/她是否购买了该产品以及这些陈述是否正确,它将显示一条消息。

我想在显示该消息之前再添加一张支票,即客户是否已经对产品留下评论/写过评论,如果这样,则不显示该消息。

换句话说,如果客户没有为产品撰写评论,请显示消息。如果客户留下评论,则不显示消息。

这是代码:

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>';
}
}

非常感谢对此的任何帮助。

LoicTheAztec

要检查客户是否对当前产品发表了评论,您将使用此自定义条件函数(使用非常简单的SQL查询):

// Utility function to check if a customer has posted a review in a product
function has_reviewed_product( $product_id ) {
    global $wpdb;

    $user = wp_get_current_user();

    if( $user->ID == 0 )
        return false;

    // Count the number of products
    $count = $wpdb->get_var( "
        SELECT COUNT(comment_ID) FROM {$wpdb->prefix}comments
        WHERE comment_post_ID = $product_id
        AND comment_author_email = '{$user->user_email}'
    " );

    return $count > 0 ? true : false;
}

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

因此,在您的代码中(根据此答案),您将按以下方式使用它:

// 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') && ! has_reviewed_product( $product->get_id() ) ) {
        $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中购买了当前产品,则显示自定义文本

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

客户端检查是否在Firebase中进行了身份验证

检查是否对numpy数组进行了排序

检查用户是否对某项投票进行了投票

检查ConcurrentHashMap的computeIfAbsent是否进行了更改

检查Git是否以编程方式进行了更改

如何检查rsync是否对bash进行了任何更改?

如何修改并检查是否在Java 8中进行了修改?

检查元素是否在Angular2中对attr / class进行了动态标记

检查用户登录的页面是否在Angular 2中进行了更改

检查onbeforeunload中的ace编辑器以查看是否进行了更改

检查用户是否仍在angularfire2中进行了身份验证

SQL [email protected]@ ROWCOUNT的替代方法,用于检查表中是否进行了UPDATE

检查在mongoose的post钩子中是否对字段findOneAndUpdate进行了修改

如何知道jtextarea中是否进行了任何更改?

尽管进行了边界检查,但ArgumentOutOfRangeException

内核是否进行了碎片整理

是否对克隆语句进行了优化?

如何检查我的应用程序是否已针对Android进行了电池优化配置?

如何检查用户是否在24小时滑轨之前进行了投票4

如何检查电子邮件是否已在Firebase中使用参数进行了验证?

如何使用JavaScript检查是否对服务器进行了调用

vscode是否在git commit消息框中进行了拼写检查?

Google Play应用内审核API。如何检查用户是否对该应用进行了评分?

检查客户是否购买了商品并将产品添加到WooCommerce中的购物车

如何检查用户何时在Firebase中对电话进行了身份验证?

在Elasticsearch中是否对数字:整数,长整数,浮点数等进行了分析?

Python:是否在列表理解中对split函数进行了多次评估?

Node.js:异步函数中是否对尾部调用进行了优化?

Kotlin的Float,Int等是否已针对JVM中的内置类型进行了优化?

TOP 榜单

  1. 1

    来自Microsoft Office加载项taskpane.js的MySQL驱动程序模块的空引用

  2. 2

    使用AWS Cognito和React的仅限Facebook / Google的登录名(无用户名/密码)

  3. 3

    创建Windows Phone 8应用并将其连接到数据库的最佳方法(最好是SQL Server)

  4. 4

    为什么Java中的System.out.println()打印到控制台?

  5. 5

    卷曲函数无法解析来自bash中变量的代理

  6. 6

    是什么在Android的consumer-rules.pro和proguard-rules.pro之间的区别?

  7. 7

    设置与Apache POI Excel表散点图标记图标的颜色

  8. 8

    将Qt Pyside2与asyncio await语法一起使用?

  9. 9

    崇高的文字+蟒蛇的蟒蛇

  10. 10

    任务':app:minifyReleaseWithR8'.java.lang.NullPointerException的执行失败(无错误消息)

  11. 11

    OpenJDK的和AdoptOpenJDK的区别

  12. 12

    大型数据集缓存到Spark内存中时,“超出了GC开销限制”(通过sparklyr和RStudio)

  13. 13

    “执行测试CMAKE_HAVE_LIBC_PTHREAD”失败实际上是什么意思?

  14. 14

    使用Core 2.2中的Identity,如何在关闭浏览器15分钟后保持会话活动?

  15. 15

    React中的ForwardRefExoticComponent和ForwardRefRenderFunction有什么区别?

  16. 16

    猫鼬查找结果,然后将字段替换为findOne

  17. 17

    如何降级Google Colab的Torch版本

  18. 18

    Keras提前停止回调错误,val_loss指标不可用

  19. 19

    如何避免VSCode中的“导入路径不能以.ts扩展名结尾”错误?

  20. 20

    Nuxt.JS:如何在页面中获取路由URL参数

  21. 21

    是否有为什么会AccessibilityManager.sInstance导致内存泄漏的一个原因?

热门标签

归档