Si gestionas una tienda de cursos en WordPress que utiliza WooCommerce y Tutor LMS, esta función PHP te será de gran utilidad. En este artículo, te explico cómo crear una función personalizada para recuperar un array de los cursos comprados por un usuario específico, ideal para filtrar y mostrar contenido basado en compras previas.
Función: get_buy_courses_by_user($user_id)
La función get_buy_courses_by_user
recibe el ID de un usuario ($user_id
) y devuelve un array con los IDs de los cursos que ha comprado a través de WooCommerce en una plataforma con Tutor LMS. Aquí tienes el código completo y una explicación detallada de cada sección:
function get_buy_courses_by_user($user_id) {
$c = 0;
$d = 0;
$e = 0;
$meta = array();
$meta_child = array();
$tutor_courses_id = array();
$orderArg = array(
'customer_id' => $user_id,
'limit' => -1,
'meta_key' => '_is_tutor_order_for_course',
'orderby' => 'date',
'order' => 'DESC',
);
$orders = wc_get_orders($orderArg);
if (isset($orders) && !empty($orders)) {
foreach ($orders as $order) {
$meta[$c] = $order->get_meta_data();
foreach ($meta[$c] as $c_meta) {
$c_meta_key = $c_meta->get_data();
$meta_child[$d] = $c_meta_key['key'];
$d++;
}
$c++;
}
foreach ($meta_child as $m_child) {
if (strpos($m_child, '_tutor_order_for_course_id_') !== false) {
$tutor_courses_id[$e] = (int)str_replace("_tutor_order_for_course_id_", "", $m_child);
$e++;
}
}
return $tutor_courses_id;
} else {
return array();
}
}
Explicación paso a paso de la función
1. Definición de variables y arrays
Al inicio, la función define varias variables y arrays:
$c
,$d
,$e
: Variables de tipo contador para indexar los arrays.$meta
y$meta_child
: Arrays para almacenar metadatos de los pedidos de WooCommerce.$tutor_courses_id
: Array donde se almacenarán los IDs de los cursos comprados, que será el valor final que devuelve la función.
2. Configuración de parámetros para la recuperación de pedidos ($orderArg
)
Para obtener todos los pedidos de WooCommerce asociados a un usuario, se usa la función wc_get_orders
con el array de configuración $orderArg
:
customer_id
: Filtra los pedidos por el ID del usuario, que se recibe como parámetro.limit
: Se establece en -1 para obtener todos los pedidos, sin límite de cantidad.meta_key
: Usamos la clave_is_tutor_order_for_course
para identificar pedidos específicos de cursos de Tutor LMS.orderby
yorder
: Ordena los pedidos por fecha en orden descendente.
3. Recuperación de pedidos de WooCommerce
Usamos wc_get_orders($orderArg)
para obtener los pedidos, asegurándonos de que existen y no están vacíos:
$orders = wc_get_orders($orderArg);
Esta función devuelve un array de pedidos específicos del usuario, cada uno con sus datos y metadatos.
4. Extracción de metadatos de los pedidos
En este bloque de código, se ejecutan dos bucles foreach
para extraer los datos necesarios de cada pedido:
foreach ($orders as $order) {
$meta[$c] = $order->get_meta_data();
foreach ($meta[$c] as $c_meta) {
$c_meta_key = $c_meta->get_data();
$meta_child[$d] = $c_meta_key['key'];
$d++;
}
$c++;
}
Para cada pedido, se accede a los metadatos con get_meta_data()
, y en el segundo bucle foreach
, se extraen las claves de metadatos, que se almacenan en $meta_child
. Este array contendrá las claves relevantes que asocian el pedido con los cursos.
5. Filtrado de IDs de cursos en los metadatos
En este paso, el segundo bucle foreach
examina cada clave en $meta_child
para encontrar las que contienen la cadena '_tutor_order_for_course_id_'
, que identifica los IDs de los cursos comprados:
foreach ($meta_child as $m_child) {
if (strpos($m_child, '_tutor_order_for_course_id_') !== false) {
$tutor_courses_id[$e] = (int)str_replace("_tutor_order_for_course_id_", "", $m_child);
$e++;
}
}
Si encuentra esta cadena, str_replace
elimina esa parte del texto, dejando solo el ID del curso, que se convierte a entero y se almacena en $tutor_courses_id
.
6. Retorno del array de IDs de cursos
Finalmente, la función devuelve $tutor_courses_id
, un array de IDs de cursos. En caso de que el usuario no tenga pedidos relevantes, la función retorna un array vacío:
return $tutor_courses_id;