WooCommerce – Überprüfen Sie, ob der Benutzer in den letzten 60 Tagen ein Produkt gekauft hat

Lesezeit: 3 Minuten

WooCommerce Uberprufen Sie ob der Benutzer in den letzten
NullHypothese

Ich bin neu bei WooCommerce und wollte überprüfen, ob ein Benutzer innerhalb der letzten 60 Tage ein bestimmtes Produkt (Produkt-ID #514) gekauft hat. Dies ist ein Produkt, das die Leute monatlich kaufen lassen, daher wird es häufig vorkommen. Ich wollte nur sehen, ob sie ein aktuelles gekauft haben (das ich als aktiv betrachte)

So wie ich mir das jetzt vorgestellt habe war:

  1. Holen Sie sich alle Bestellungen von einem Benutzer
  2. Überprüfen Sie für jede Bestellung, ob sie in den letzten 60 Tagen aufgetreten ist und erhalten Sie alle Produkte für diese Bestellung
  3. Prüfen Sie für jedes Produkt, ob die ID x ist

Ich bin mir sicher, dass das funktionieren wird, aber ich habe das komische Gefühl, dass es eine wirklich prägnante ist get_posts(apply_filters( Abfrage, die mir einige Schleifenzeit spart.

Wäre jemand bereit, ein paar Ideen oder eine Lösung zu teilen?

Danke!

Hier ist eine bedingte Funktion, die teilweise auf der integrierten Woocommerce-Funktion basiert wc_customer_bought_product Quellcode-Abfrage:

Es gibt 3 optionale Argumente $user_id, $product_ids und $days:

  • $user_id ermöglicht es Ihnen, eine definierte Benutzer-ID anzugeben (wenn sie nicht für den aktuell angemeldeten Benutzer verwendet wird);
  • $product_ids (String oder ein Array) ermöglicht es, definierte Produkt-IDs anzugeben, die überprüft werden sollen
  • $daysermöglicht es Ihnen, die Anzahl der Tage anzugeben, nach denen gesucht werden soll (oder der Zeitraum, wenn Sie es vorziehen)

Die Code-Funktion:

function has_bought_multi( $user_id = 0,  $product_ids = 0, $days = 0 ) {
    global $wpdb;
    $customer_id = $user_id == 0 || $user_id == '' ? get_current_user_id() : $user_id;
    $statuses      = array_map( 'esc_sql', wc_get_is_paid_statuses() );
    $date = date('Y-m-d H:i:s', strtotime("-$days day") );

    if ( is_array( $product_ids ) )
        $product_ids = implode(',', $product_ids);

    if ( $product_ids !=  ( 0 || '' ) )
        $query_line = "AND woim.meta_value IN ($product_ids)";
    else
        $query_line = "AND woim.meta_value != 0";

    // Count the number of products
    $product_count_query = $wpdb->get_col( "
        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 IN ( 'wc-" . implode( "','wc-", $statuses ) . "' )
        AND p.post_date > '$date'
        AND pm.meta_key = '_customer_user'
        AND pm.meta_value = $customer_id
        AND woim.meta_key IN ( '_product_id', '_variation_id' )
        $query_line
    " );
    // Set the count in a string
    $count = reset($product_count_query);

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

Code geht in die Datei function.php Ihres aktiven Child-Themes (oder Themes) oder auch in eine beliebige Plugin-Datei.

Dieser Code wurde auf Woocommerce 3+ getestet und funktioniert.

Ähnliche Antwort: Prüfen Sie, ob ein Kunde ein bestimmtes Produkt in WooCommerce gekauft hat


ANWENDUNGSBEISPIEL (Kunde ist eingeloggt):

Ermitteln, ob der aktuelle Benutzer Ihre Produkt-ID Nr. 514 in den letzten 60 Tagen gekauft hat:

if( has_bought_multi( '', 514, 60 ) ){
    echo "<p>Customer has bought product id # 514 in past 60 days</p>";
    // do something
} else {
    echo "<p>Customer <strong>HAS NOT</strong> bought product id # 514 in past 60 days</p>";
    // do something else
}

.

308220cookie-checkWooCommerce – Überprüfen Sie, ob der Benutzer in den letzten 60 Tagen ein Produkt gekauft hat

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy