Cómo obtener productos de tipo WooCommerce Subscription con get_posts()

Cuando trabajas con suscripciones de WooCommerce, es posible que en algún momento necesites obtener una lista de todos los productos de tipo suscripción. Ya sea para generar informes, crear promociones, o personalizar funcionalidades en tu tienda.

A continuación, veremos cómo construir una consulta personalizada y crear una función que te devuelva los IDs y nombres de los productos de suscripción de WooCommerce utilizando get_posts();

La estructura básica de la consulta

$products_subscr = get_posts(array(
    'numberposts' => -1,
    'post_status' => 'publish',
    'post_type'   => array('product', 'product_variation'),
    'meta_key'    => '_subscription_price',
));

La estructura para obtener todos los productos que tienen una meta clave específica (_subscription_price), que es la que WooCommerce utiliza para almacenar el precio de las suscripciones. Al aplicar este filtro, estaremos seguros de que estamos obteniendo únicamente productos de tipo suscripción.

Explicación de los parámetros en get_posts()

  • ‘numberposts’ => -1: Esto indica que queremos obtener todos los productos sin límite de cantidad.
  • ‘post_status’ => ‘publish’: Solo nos interesan los productos que estén publicados.
  • ‘post_type’ => array(‘product’, ‘product_variation’): Aquí estamos indicando que queremos productos y variaciones de productos.
  • ‘meta_key’ => ‘_subscription_price’: Este es el filtro más importante, ya que estamos buscando productos que tengan una meta clave llamada _subscription_price, que indica que es un producto de tipo suscripción.

Crear una función para obtener los productos de suscripción

Ahora que ya tenemos claro cómo estructurar nuestra consulta, vamos a encapsularla en una función que devolverá un array con los IDs y los nombres de todos los productos de suscripción. Para esto, vamos a utilizar la función wc_get_product() que nos permite obtener más detalles sobre el producto.

Aquí está el código de la función:

function get_subscription_products() {
    $products_arr = array(); // Inicializamos el array que almacenará los productos
    $products_subscr = get_posts(array(
        'numberposts' => -1,
        'post_status' => 'publish',
        'post_type'   => array('product', 'product_variation'),
        'meta_key'    => '_subscription_price',
    ));

    // Recorremos cada producto obtenido de la consulta
    foreach ($products_subscr as $prod_subs) {
        $product = wc_get_product($prod_subs->ID); // Obtenemos el objeto del producto
        $products_arr[$product->get_id()] = $product->get_name(); // Guardamos el ID y el nombre en el array
    }

    return $products_arr; // Devolvemos el array con los productos de suscripción
}

¿Cómo funciona?

  1. Inicialización: Primero creamos un array vacío $products_arr que se llenará con los productos que encontremos.
  2. Consulta de productos de suscripción: Usamos get_posts() para obtener todos los productos que cumplan con el criterio de ser productos de suscripción, es decir, aquellos que tienen la meta clave _subscription_price.
  3. Recorrer los resultados: Con un foreach, recorremos cada resultado obtenido de get_posts() y, para cada producto, usamos wc_get_product() para obtener más información del producto.
  4. Llenar el array: Guardamos el ID y el nombre del producto en el array $products_arr usando el ID como clave y el nombre como valor.
  5. Devolver el resultado: Al final, retornamos el array con los productos de suscripción.

¿Qué puedes hacer con esta información?

Una vez que tengas esta función, puedes usarla para:

  • Mostrar los productos de suscripción en tu sitio: Puedes mostrar un listado de productos de suscripción en cualquier parte de tu tienda online.
  • Personalizar procesos de ventas: Utilizar este listado para aplicar descuentos automáticos o promociones exclusivas en los productos de suscripción.
  • Generar reportes: Si necesitas crear informes sobre los productos de suscripción, puedes usar la información de esta función para generar listados, exportar datos, o mostrar estadísticas.

Compartir esta información