首先定义一个函数来检查用户以前是否购买过产品。
// function to check product bought by user before
function has_bought_items( $user_var = 0, $product_ids = 0 ) {
global $wpdb;
// Based on user ID (registered users)
if ( is_numeric( $user_var) ) {
$meta_key = \'_customer_user\';
$meta_value = $user_var == 0 ? (int) get_current_user_id() : (int) $user_var;
}
// Based on billing email (Guest users)
else {
$meta_key = \'_billing_email\';
$meta_value = sanitize_email( $user_var );
}
$paid_statuses = array_map( \'esc_sql\', wc_get_is_paid_statuses() );
$product_ids = is_array( $product_ids ) ? implode(\',\', $product_ids) : $product_ids;
$line_meta_value = $product_ids != ( 0 || \'\' ) ? \'AND woim.meta_value IN (\'.$product_ids.\')\' : \'AND woim.meta_value != 0\';
// Count the number of products
$count = $wpdb->get_var( "
SELECT COUNT(p.ID) 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 IN ( \'wc-" . implode( "\',\'wc-", $paid_statuses ) . "\' )
AND pm.meta_key = \'$meta_key\'
AND pm.meta_value = \'$meta_value\'
AND woim.meta_key IN ( \'_product_id\', \'_variation_id\' ) $line_meta_value
" );
// Return true if count is higher than 0 (or false)
return $count > 0 ? true : false;
}
之后,如果用户尚未购买产品,请创建一个快捷码以显示CTA:
function cta_shortcode() {
$cta= \'<a href="#">Buy This Product</a>\';
return has_bought_items() ? "" : $cta;
}
// register shortcode
add_shortcode(\'cta-shortcode\', \'cta_shortcode\');
最后,您可以使用此短代码有条件地向用户显示cta。
[cta-shortcode]