reglas precios precio por plugin permanentes generador enlaces dinamicos descuentos descuento cómo cupones configurar cantidad 2x1 php mysql woocommerce

php - precios - woocommerce precio por cantidad



Valor de venta total de Woocommerce de un cupón específico (1)

La cuestión:

Necesito una forma de obtener primero todas las ventas realizadas con un código de cupón específico. A continuación, obtenga los ingresos totales de todas esas ventas (y preferiblemente restando las devoluciones de esas ventas. Para obtener el valor real de los ingresos).

Idea para ejecutar

Estoy utilizando woocommerce 2.6.8 y la base de datos MySql para esto. Supongo que de alguna manera tendré que contar primero el número de ventas realizadas con un cupón específico con PHP y MySql. Luego, para cada ID de orden único con el cupón específico, realice una nueva consulta para la suma total.

Cualquier sugerencia sobre cómo se vería el PHP y las consultas son muy apreciadas :)

Debo señalar que no estoy buscando obtener la suma total del descuento del cupón . Necesito calcular el valor total que se ha vendido con el cupón específico (no el descuento).

OK, entonces todavía no hay solución de trabajo hasta el momento. Pero esto es lo que creo que es la estructura básica de la misma. Obtener el total no es tan fácil porque el cupón no está directamente asociado con el pedido. Creo que la consulta debería ser algo en la línea de esto:

{TBLPRFX} _woocommerce_order_items

Paso 1. GET order_id FOR order_item_name = {COUPON_NAME}

Paso 2. OBTENER order_item_id FOR order_item_type = line_item WHERE order_id EQUAL {RESULTADO DEL PASO 1}

| order_item_id | order_item_name | order_item_type | order_id |

| 40971 | {COUPON_NAME} | cupón | 001

| 40970 | IVA | impuesto | 001

| 40969 | {PRODUCT_NAME} | line_item | 001

-

{TBLPRFX} _woocommerce_order_itemmeta

Paso 3. SUMAR meta_value FROM meta_key = _line_tax Y meta_key = _line_total WHERE order_item_id = {RESULTADO DEL PASO 2}

| order_item_id | meta_key | meta_value |

| 40969 | _line_tax | {VALUE_TAX}

| 40969 | _line_total | {VALUE_TOTAL}

| 40969 | _product_id | {ID DEL PRODUCTO}

-

Son las consultas que necesito ayuda para descubrir :) No estoy realmente seguro de cómo pedir esto en MySql y PHP. La idea es hacer de esto un foreach donde "order_item_name = {COUPON_NAME_VARIABLE}", por lo que puedo resumir el total de todas las ventas donde se usó ese cupón (es decir, NO el valor de descuento del cupón).


Entonces, después de muchas pruebas, se me ocurrió una solución de trabajo. No es el más elegante, pero hace el trabajo.

Si algún SQL-ninjas ve esto, sería genial si pudiera sugerir consultas más optimizadas :)

Después de hacer la primera solución de trabajo, me di cuenta de que hay más pasos que deben verificarse para obtener un total más preciso. Manejo de reembolsos, impuestos, descuentos, etc. y también me aseguro de obtener solo los datos de los pedidos completados (ya que cancelados, en espera, pendientes, etc. no son una venta hasta que se completen).

Entonces, esto es con lo que terminé. Como dije, sé que necesita algo de trabajo y probablemente podría hacerse mejor. Pero por ahora, funciona.

  • CÓDIGO REVISADO PARA FUNCIONES .PHP -

    // COUPON CHECK function couponcheck() { global $wpdb; $gtl = 0; // Grand Total $total_sales = 0; $cpn = $_GET[''cpn'']; // Get coupon name from URL string $tblprfx = ''[YOUR_TABLE_PREFIX]''; // Table prefix $wpps = ''posts''; // Look for post_status $wppm = ''postmeta''; $wcoi = ''woocommerce_order_items''; $conversion_value = 1; $base_currency = ''[YOUR_BASE_CURRENCY]''; $currency; $orders_made; // Check to make sure there is a couon name in string if(isset($cpn) && !empty($cpn)){ // Query chain $init_result = $wpdb->get_results("SELECT order_id FROM {$tblprfx}{$wcoi} WHERE order_item_name=''$cpn''"); $orders_made = count($init_result); foreach($init_result as $ir){ $r1 = $ir->order_id; $completed_result = $wpdb->get_results( "SELECT ID FROM {$tblprfx}{$wpps} WHERE post_status=''wc-completed'' AND ID=$r1" ); foreach($completed_result as $post_rows) { $pr = $post_rows->ID; $completed_sales += 1; $currency_result = $wpdb->get_results( "SELECT meta_value FROM {$tblprfx}{$wppm} WHERE post_id=$pr AND meta_key=''_order_currency''" ); foreach($currency_result as $cr) { $currency = $cr->meta_value; if($currency === ''EUR''){ $currency = ''EUR''; $currency_rate = $wpdb->get_results( "SELECT meta_value FROM {$tblprfx}{$wppm} WHERE post_id=$pr AND meta_key=''_woocs_order_rate''" ); foreach($currency_rate as $rv) { $rate_value = $rv->meta_value; $conversion_value = $rate_value; } } } $data_result = $wpdb->get_results( "SELECT meta_value FROM {$tblprfx}{$wppm} WHERE post_id=$pr AND meta_key=''_order_total''" ); foreach($data_result as $dr) { $d = $dr->meta_value; if($currency === ''EUR''){ $eur += $d; $d = $d/$conversion_value; }else{ $[YOUR_BASE_CURRENCY] += $d; } $gtl += $d; } } } // Total number of sales $refunded_orders = $orders_made-$completed_sales; $order_avg = $gtl/$completed_sales; echo ''<p>Total <strong>completed, non-refunded, sales made (after discounts)</strong> with coupon <strong>'' . strtoupper($cpn) . ''</strong>: <br />(Number of refunded orders: <strong>'' . $refunded_orders . '')</strong></p><h2>'' . $completed_sales . ''</h2><p>At a total <strong>sales value</strong> of:</p><h2>'' . number_format($[YOUR_BASE_CURRENCY],2) . '' [YOUR_BASE_CURRENCY]</h2><h2>&euro;'' . number_format($eur,2) . ''</h2><p>Adding up to a <strong>sum total</strong> of:</p><h2>'' . number_format($gtl,2) . '' [YOUR_BASE_CURRENCY]</h2><p>Creating an average order value of:<br /><strong>'' . number_format($order_avg,2) . '' [YOUR_BASE_CURRENCY]</strong>''; } } add_shortcode(''coupons'', ''couponcheck'');

Una pequeña nota es que cambié mi moneda base real a [YOUR_BASE_CURRENCY]. Los comentarios (constructivos) son bienvenidos :)