get_error_code() ) return $validation_errors; $new_customer_data = apply_filters( 'woocommerce_new_customer_data', array( 'user_login' => $username, 'user_pass' => $password, 'user_email' => $email, 'role' => 'customer' ) ); $customer_id = wp_insert_user( $new_customer_data ); if ( is_wp_error( $customer_id ) ) return new WP_Error( "registration-error", '' . __( 'ERROR', 'woocommerce' ) . ': ' . __( 'Couldn’t register you… please contact us if you continue to have problems.', 'woocommerce' ) ); do_action( 'woocommerce_created_customer', $customer_id, $new_customer_data, $password_generated ); return $customer_id; } /** * Login a customer (set auth cookie and set global user object) * * @param int $customer_id * @return void */ function woocommerce_set_customer_auth_cookie( $customer_id ) { global $current_user; $current_user = get_user_by( 'id', $customer_id ); wp_set_auth_cookie( $customer_id, true ); } /** * Get past orders (by email) and update them * * @param int $customer_id * @return void */ function woocommerce_update_new_customer_past_orders( $customer_id ) { $customer = get_user_by( 'id', absint( $customer_id ) ); $customer_orders = get_posts( array( 'numberposts' => -1, 'post_type' => 'shop_order', 'post_status' => 'publish', 'fields' => 'ids', 'meta_query' => array( array( 'key' => '_customer_user', 'value' => array( 0, '' ), 'compare' => 'IN' ), array( 'key' => '_billing_email', 'value' => $customer->user_email, ) ), ) ); $linked = 0; $complete = 0; if ( $customer_orders ) foreach ( $customer_orders as $order_id ) { update_post_meta( $order_id, '_customer_user', $customer->ID ); $order_status = wp_get_post_terms( $order_id, 'shop_order_status' ); if ( $order_status ) { $order_status = current( $order_status ); $order_status = sanitize_title( $order_status->slug ); } if ( $order_status == 'completed' ) $complete ++; $linked ++; } if ( $complete ) { update_user_meta( $customer_id, 'paying_customer', 1 ); update_user_meta( $customer_id, '_order_count', '' ); update_user_meta( $customer_id, '_money_spent', '' ); } return $linked; } /** * Order Status completed - This is a paying customer * * @access public * @param int $order_id * @return void */ function woocommerce_paying_customer( $order_id ) { $order = new WC_Order( $order_id ); if ( $order->user_id > 0 ) { update_user_meta( $order->user_id, 'paying_customer', 1 ); $old_spent = absint( get_user_meta( $order->user_id, '_money_spent', true ) ); update_user_meta( $order->user_id, '_money_spent', $old_spent + $order->order_total ); $old_count = absint( get_user_meta( $order->user_id, '_order_count', true ) ); update_user_meta( $order->user_id, '_order_count', $old_count + 1 ); } } add_action( 'woocommerce_order_status_completed', 'woocommerce_paying_customer' ); /** * woocommerce_customer_bought_product * * Checks if a user (by email) has bought an item * * @access public * @param string $customer_email * @param int $user_id * @param int $product_id * @return bool */ function woocommerce_customer_bought_product( $customer_email, $user_id, $product_id ) { global $wpdb; $emails = array(); if ( $user_id ) { $user = get_user_by( 'id', $user_id ); $emails[] = $user->user_email; } if ( is_email( $customer_email ) ) $emails[] = $customer_email; if ( sizeof( $emails ) == 0 ) return false; $completed = get_term_by( 'slug', 'completed', 'shop_order_status' ); return $wpdb->get_var( $wpdb->prepare( " SELECT COUNT( DISTINCT order_items.order_item_id ) FROM {$wpdb->prefix}woocommerce_order_items as order_items LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS itemmeta ON order_items.order_item_id = itemmeta.order_item_id LEFT JOIN {$wpdb->postmeta} AS postmeta ON order_items.order_id = postmeta.post_id LEFT JOIN {$wpdb->term_relationships} AS rel ON order_items.order_id = rel.object_ID WHERE rel.term_taxonomy_id = %d AND itemmeta.meta_value = %s AND itemmeta.meta_key IN ( '_variation_id', '_product_id' ) AND postmeta.meta_key IN ( '_billing_email', '_customer_user' ) AND ( postmeta.meta_value IN ( '" . implode( "','", array_unique( $emails ) ) . "' ) OR ( postmeta.meta_value = %d AND postmeta.meta_value > 0 ) ) ", $completed->term_taxonomy_id, $product_id, $user_id ) ); } /** * woocommerce_customer_has_capability * * Checks if a user has a certain capability * * @access public * @param array $allcaps * @param array $caps * @param array $args * @return bool */ function woocommerce_customer_has_capability( $allcaps, $caps, $args ) { if ( isset( $caps[0] ) ) { switch ( $caps[0] ) { case 'view_order': $user_id = $args[1]; $order = new WC_Order( $args[2] ); if ( $user_id == $order->user_id ) $allcaps['view_order'] = true; break; case 'pay_for_order': $user_id = $args[1]; $order = new WC_Order( $args[2] ); if ( $user_id == $order->user_id ) $allcaps['pay_for_order'] = true; break; case 'order_again': $user_id = $args[1]; $order = new WC_Order( $args[2] ); if ( $user_id == $order->user_id ) $allcaps['order_again'] = true; break; case 'cancel_order': $user_id = $args[1]; $order = new WC_Order( $args[2] ); if ( $user_id == $order->user_id ) $allcaps['cancel_order'] = true; break; } } return $allcaps; } add_filter( 'user_has_cap', 'woocommerce_customer_has_capability', 11, 3);