SaveTo Wishlist para WooCommerce
Empezar
Cómo extender SaveTo Wishlist Pro con hooks y la API REST - SaveTo Wishlist
  1. Inicio
  2. Base de Conocimiento
  3. Lista de Deseos
  4. Guías para Desarrolladores
  5. Cómo extender SaveTo Wishlist Pro con hooks y la API REST
  1. Inicio
  2. Base de Conocimiento
  3. Lista de Deseos
  4. Cómo extender SaveTo Wishlist Pro con hooks y la API REST

Cómo extender SaveTo Wishlist Pro con hooks y la API REST

¿Necesitas cambiar cómo se comporta SaveTo Wishlist Pro sin editar el plugin? Puedes hacerlo con hooks de WordPress y la API REST del plugin. Este artículo enumera los hooks y rutas que puedes usar, con los argumentos que cada uno pasa y breves ejemplos de PHP. Todo aquí se aplica a SaveTo Wishlist Pro 1.0.4.

Antes de empezar

SaveTo Wishlist Pro se ejecuta sobre SaveTo Wishlist Lite, por lo que ambos plugins deben estar activos. Coloca tu código de hook en un pequeño plugin personalizado o en un plugin indispensable, no en los archivos de SaveTo Wishlist Pro, porque las actualizaciones del plugin reemplazan esos archivos.

Cada nombre de hook de Pro comienza con stwpro_. Los hooks para el plugin gratuito se cubren en Cómo extender SaveTo Wishlist con hooks y la API REST.

Los hooks y filtros a continuación se enumeran con los argumentos que pasan. Cuando agregues un filtro, establece el número de argumentos aceptados para que coincida, o WordPress solo te pasará el primer argumento. Devuelve el primer argumento (o una copia modificada del mismo) de cada filtro.

Rutas de la API REST

Todas las rutas de SaveTo Wishlist Pro usan el espacio de nombres saveto-wishlist-pro/v1, por lo que la URL completa se ve así https://example.com/wp-json/saveto-wishlist-pro/v1/analytics/products-insight.

Quién puede llamar a las rutas

Las rutas de análisis, automatización, listas de deseos predeterminadas y licencias sirven a las propias pantallas de administración del plugin y pueden cambiar. Solo responden a solicitudes de un usuario conectado que tenga la capacidad manage_options (administradores por defecto). Cualquier otra persona recibe un error 401 o 403. Envía la solicitud con una sesión de inicio de sesión normal de WordPress y un nonce REST, o con cualquier otro método de autenticación REST que tu sitio admita.

Las rutas de lectura de análisis, las rutas de automatización y las rutas de licencias también tienen un límite de tasa por usuario. Las solicitudes de lectura (GET) obtienen 300 solicitudes por minuto. Todos los demás métodos obtienen 60 solicitudes por minuto. Cuando te excedes, la ruta devuelve un error 429 con el código rate_limit_exceeded. Puedes cambiar los límites con el filtro stwpro_api_rate_limit, cubierto a continuación.

Rutas de análisis

La ruta base es /analytics.

RutaMétodoQuién puede llamarlaLo que hace
/analytics/products-insightGETAdministradores, con límite de tasaDevuelve los productos más populares, de tendencia y añadidos recientemente. Acepta period con el valor 7days o 30days. El valor predeterminado es 7days.
/analytics/category-brand-insightGETAdministradores, con límite de tasaDevuelve información sobre categorías y marcas.
/analytics/engagement-insightGETAdministradores, con límite de tasaDevuelve información sobre la interacción con los productos.
/analytics/timebased-trendsGETAdministradores, con límite de tasaDevuelve tendencias a lo largo del tiempo. Acepta range con el valor 7days, 30days, 90days o 365days. El valor predeterminado es 30days.
/analytics/customer-behaviorGETAdministradores, con límite de tasaDevuelve información sobre el comportamiento del cliente, incluidos los principales compradores de listas de deseos y segmentos de clientes.
/analytics/refreshPOSTAdministradoresLimpia las cachés de análisis. Un usuario puede actualizar una vez cada 30 segundos. Una solicitud más rápida devuelve un error 429 con el código cooldown_active.

Las respuestas de análisis se almacenan en caché durante una hora por defecto. Una llamada exitosa a /analytics/refresh limpia la caché, por lo que la siguiente lectura devuelve datos actualizados.

Este ejemplo lee los productos de tendencia de los últimos 30 días desde el navegador, en un script que se ejecuta en una pantalla de administración de WordPress:

wp.apiFetch( {
    path: '/saveto-wishlist-pro/v1/analytics/products-insight?period=30days',
} ).then( ( data ) => {
    console.log( data.most_popular, data.trending, data.recently_added );
} );

Rutas de automatización

La ruta base es /automations. Las cuatro rutas requieren un administrador y tienen límites de tasa.

RutaMétodoLo que hace
/automations/get-automationsGETDevuelve las automatizaciones guardadas. Los parámetros de consulta se utilizan como filtros.
/automations/save-automationPOSTCrea o actualiza una automatización. Lee id, trigger_type, action_type, status, description y action_data.
/automations/delete-automationELIMINARElimina la automatización con el ID del parámetro id. Devuelve un error 400 cuando el ID está vacío.
/automations/send-test-emailPOSTEnvía un correo electrónico de prueba con datos ficticios. Lee email_to, email_subject y email_body.

Rutas de listas de deseos por defecto

La ruta base es /default-wishlists. Todas las rutas requieren un administrador.

RutaMétodoLo que hace
/default-wishlists/settingsGET, POSTLee o guarda la configuración de la lista de deseos por defecto. La solicitud POST lee el parámetro list.
/default-wishlists/migration-statusGETDevuelve el progreso del trabajo que crea listas de deseos por defecto para los usuarios existentes que no tienen ninguna, y cuántos usuarios aún son elegibles.
/default-wishlists/start-migrationPOSTInicia ese trabajo.
/default-wishlists/cancel-migrationPOSTCancela ese trabajo.

Ruta de webhook

La ruta /webhook/wishlist-created es diferente de las otras. No utiliza un inicio de sesión de WordPress. Utiliza la clave API del webhook, enviada en la cabecera x-api-key o el parámetro de consulta api_key, y responde 401 cuando la clave falta o es incorrecta. Una solicitud POST activa la acción stwpro_wishlist_created. Una solicitud GET con un parámetro wishlist_id devuelve una lista de deseos pública y publicada. Para obtener detalles de configuración y seguridad, lee Cómo conectar herramientas externas usando webhooks de listas de deseos y Cómo proteger el punto final de la API de webhook de SaveTo Wishlist Pro.

Filtros para la comprobación de permisos de administrador

FiltroArgumentosLo que hace
stwpro_api_admin_permissions_check$response, $requestFiltra el resultado de la comprobación de administrador en las rutas exclusivas para administradores. Devuelve true para permitir, o un WP_Error para denegar.
stwpro_webhook_permissions_check$response, $requestFiltra el resultado de la comprobación de la clave API en la ruta de la webhook.
stwpro_api_rate_limit$limit, $request, $is_readEstablece las solicitudes permitidas por minuto. Los valores predeterminados son 300 para las solicitudes de lectura y 60 para el resto.
stwpro_api_rate_limit_check$result, $requestFiltra el resultado final de la comprobación del límite de tasa.

Por ejemplo, esto aumenta el límite de escritura a 120 solicitudes por minuto:

add_filter( 'stwpro_api_rate_limit', function ( $limit, $request, $is_read ) {
    return $is_read ? $limit : 120;
}, 10, 3 );

Ganchos de automatización

Las automatizaciones conectan un disparador, como un producto que sale a la venta, a una acción, como el envío de un correo electrónico. Estos ganchos te permiten añadir tus propias acciones y cambiar lo que envían las acciones integradas.

Añade tu propia acción de automatización

Dos filtros trabajan juntos. Usa stwpro_automation_actions para añadir tu acción a la lista de acciones, y usa stwpro_automation_action_handlers para decir qué función la ejecuta. Los tipos de acción integrados son send_email, call_webhook y update_user_meta.

FiltroArgumentosLo que hace
stwpro_automation_actions$actionsFiltra la lista de tipos de acción. Cada elemento es una clave de acción y su etiqueta.
stwpro_automation_action_handlers$handlersFiltra el mapa de tipo de acción a manejador. El manejador debe ser invocable. Si tu callback devuelve algo que no sea una matriz, el plugin lo ignora y mantiene los manejadores integrados.

WordPress llama a tu manejador con cinco argumentos: las automatizaciones activas de ese tipo para el disparador, los datos de la automatización, el objeto de contexto del disparador, un booleano para la condición de categoría de producto y una matriz de parámetros adicionales.

add_filter( 'stwpro_automation_actions', function ( $actions ) {
    $actions['send_to_crm'] = __( 'Send to my CRM', 'my-plugin' );
    return $actions;
} );

add_filter( 'stwpro_automation_action_handlers', function ( $handlers ) {
    $handlers['send_to_crm'] = 'my_plugin_process_crm_automations';
    return $handlers;
} );

function my_plugin_process_crm_automations( $automations, $automation_data, $context_data, $category_condition, $params ) {
    foreach ( $automations as $automation ) {
        // Send $automation_data to your CRM here.
    }
}

Cambia quién recibe un correo electrónico de automatización

Dos filtros establecen el destinatario del correo electrónico. stwpro_automation_filter_email_to_customer se ejecuta una vez por propietario de la lista de deseos para el producto en oferta y el producto de vuelta en stock disparadores. stwpro_automation_filter_email_to se ejecuta para todos los demás disparadores. Con ambos filtros, una dirección vacía o inválida omite el correo electrónico.

FiltroArgumentos
stwpro_automation_filter_email_to$email_to, $action_data, $context_data, $data, $params
stwpro_automation_filter_email_to_customer$email_to, $action_data, $per_customer_data, $context_data, $params

Este ejemplo envía todos los correos electrónicos de automatización a una dirección de prueba en un sitio de staging, y omite a los clientes que se dieron de baja:

add_filter( 'stwpro_automation_filter_email_to', function ( $email_to ) {
    if ( 'production' !== wp_get_environment_type() ) {
        return '[email protected]';
    }
    return $email_to;
}, 10, 1 );

add_filter( 'stwpro_automation_filter_email_to_customer', function ( $email_to, $action_data, $per_customer_data ) {
    $customer_id = (int) ( $per_customer_data['customer_id'] ?? 0 );
    if ( $customer_id && get_user_meta( $customer_id, 'no_wishlist_alerts', true ) ) {
        return '';
    }
    return $email_to;
}, 10, 3 );

Cambia el contenido y los datos de la automatización

Estos cuatro filtros pasan el valor que filtras primero. Los siguientes argumentos son el registro de automatización, la configuración de la acción, el contexto del disparador, los datos de la variable resuelta y los parámetros adicionales. Se ejecutan antes de que el plugin reemplace las etiquetas de variable, por lo que tus cambios aún pueden contener etiquetas como {customer_name}.

FiltroArgumentosQué filtra
stwpro_automation_email_subject_template$subject_template, $automation, $action_data, $context_data, $data, $paramsEl asunto de correo electrónico sin procesar.
stwpro_automation_email_message_template$message_template, $automation, $action_data, $context_data, $data, $paramsEl mensaje de correo electrónico sin procesar.
stwpro_automation_webhook_payload_template$payload_template, $automation, $action_data, $context_data, $data, $paramsLa carga útil de webhook sin procesar.
stwpro_automation_usermeta_meta_value_template$meta_value, $automation, $action_data, $context_data, $data, $paramsEl valor sin procesar para la acción de actualizar metadatos de usuario.

Tres filtros más tienen sus propios argumentos:

FiltroArgumentosQué filtra
stwpro_automation_variables$trigger_variables, $trigger_typeLas etiquetas de variables disponibles para un disparador.
stwpro_automation_webhook_recipes$recipesLas recetas de inicio rápido de webhook.
stwpro_automations_get_all_automations$automations, $trigger_type, $action_typeLas automatizaciones activas para un tipo de disparador y acción.

Para los datos de variables de cada disparador, usa uno de estos filtros. Todos pasan $variable_data, $trigger_type, $context_data.

  • stwpro_automation_data_wishlist_created
  • stwpro_automation_data_item_added_to_wishlist
  • stwpro_automation_data_item_removed_from_wishlist
  • stwpro_automation_data_product_on_sale
  • stwpro_automation_data_product_back_in_stock

Ganchos de análisis

Umbrales de nivel y segmento de cliente

La analítica de clientes clasifica a cada cliente destacado en una categoría. Un cliente alcanza una categoría cuando se cumplen ambos números: la cantidad de artículos en la lista de deseos y el importe total gastado. El plugin comprueba las categorías de platino a bronce, y los clientes que no cumplen ninguna son clientes habituales. Cada filtro toma un argumento, el valor predeterminado, y devuelve un número.

NivelFiltro de cantidad de artículos en la lista de deseosPor defectoFiltro de gastoPor defecto
Platinostwpro_admin_platinum_threshold8stwpro_admin_platinum_spent_threshold1500
Orostwpro_admin_gold_threshold5stwpro_admin_gold_spent_threshold800
Platastwpro_admin_silver_threshold3stwpro_admin_silver_spent_threshold400
Broncestwpro_admin_bronze_threshold2stwpro_admin_bronze_spent_threshold200
add_filter( 'stwpro_admin_platinum_threshold', function () {
    return 10;
} );

add_filter( 'stwpro_admin_platinum_spent_threshold', function () {
    return 2500;
} );

Otros filtros de analítica cambian los segmentos de clientes y las listas que se muestran en las pantallas de analítica:

FiltroArgumentosPor defectoLo que hace
stwpro_admin_vip_threshold$value5Cantidad de artículos en la lista de deseos para el segmento de clientes VIP.
stwpro_admin_vip_spent_threshold$value800Importe total gastado para el segmento de clientes VIP.
stwpro_admin_inactive_days$value90Días sin actividad antes de que un cliente cuente como inactivo.
stwpro_admin_top_wishlisters_limit$limit15Cuántos clientes devuelve la lista de los más deseados.
stwpro_admin_top_wishlisters_excluded_roles$excluded_rolesarray( 'administrator', 'shop_manager' )Roles excluidos de la lista de los más deseados.
stwpro_admin_customer_segments$segments, $total_customersNingunoLa lista final de segmentos de clientes.

Datos de analítica, caché y actualización

HookTipo y argumentosLo que hace
stwpro_analytics_products_insight_dataFiltro: $products_insight, $requestCambia los datos que devuelve la ruta de información de productos.
stwpro_analytics_products_insight_cache_durationFiltro: $secondsEstablece cuánto tiempo se almacena en caché esa respuesta. El valor predeterminado es una hora. Las rutas de categorías y marcas, interacción, tendencias basadas en el tiempo y comportamiento del cliente tienen filtros coincidentes: stwpro_analytics_category_brand_insight_cache_duration, stwpro_analytics_engagement_insight_cache_duration, stwpro_analytics_timebased_trends_cache_duration y stwpro_analytics_customer_behavior_cache_duration.
stwpro_analytics_refresh_cooldownFiltro: $secondsEstablece los segundos que un usuario espera entre actualizaciones. El valor predeterminado es 30. Devuelve 0 para desactivar la espera.
stwpro_analytics_refreshedAcción: $timestampSe ejecuta después de que una actualización borra las cachés. Úsala para reconstruir tus propios datos derivados.

Los umbrales anteriores se leen cuando se calculan las analíticas. Si cambias uno y la pantalla no cambia, actualiza las analíticas para que los resultados en caché se reconstruyan.

Ganchos de listas de deseos predeterminadas

Estos ganchos controlan las listas de deseos que Pro crea automáticamente para los nuevos usuarios.

HookTipo y argumentosLo que hace
stwpro_default_wishlists_sync_thresholdFiltro: $thresholdSi la lista configurada tiene más listas de deseos que este número, Pro las crea en segundo plano con Action Scheduler en lugar de durante el registro. El valor predeterminado es 3.
stwpro_default_wishlists_max_entriesFiltro: $maxEl máximo de listas de deseos predeterminadas que puedes guardar en la lista. El valor predeterminado es 20.
stwpro_after_seed_default_wishlistsAcción: $user_id, $created, $listSe ejecuta después de que un usuario recibe las listas de deseos predeterminadas. $created es el número de listas de deseos creadas. No se ejecuta cuando no se creó ninguna.
add_action( 'stwpro_after_seed_default_wishlists', function ( $user_id, $created, $list ) {
    update_user_meta( $user_id, 'default_wishlists_created', $created );
}, 10, 3 );

Otros ganchos

HookTipo y argumentosLo que hace
stwpro_wholesale_priceFiltro: $price, $product_id, $user, $user_wholesale_rolePermite que otro plugin mayorista proporcione el precio mayorista. Devuelve un flotante para omitir la búsqueda de Precios Mayoristas. Devuelve falso para usar la búsqueda predeterminada.
stwpro_disable_abilitiesFiltro: $disabledDevuelve verdadero para evitar que Pro registre sus habilidades. También puedes definir la constante STWPRO_DISABLE_ABILITIES como verdadera.
stwpro_show_powered_by_in_emailFiltro: $showDevuelve falso para eliminar la línea “Powered by SaveTo Wishlist” de los correos electrónicos enviados por Pro.
stwpro_wishlist_createdAcción: $wishlist_data, $wishlist_itemsSe ejecuta cuando una solicitud POST válida llega a la ruta del webhook /webhook/wishlist-created.
add_filter( 'stwpro_show_powered_by_in_email', '__return_false' );

Preguntas frecuentes

¿Puedo llamar a las rutas de análisis o automatización desde fuera de WordPress?
Solo como administrador conectado. Estas rutas comprueban la capacidad manage_options y sirven a las pantallas propias del plugin, así que utiliza los hooks anteriores para cualquier cosa que deba permanecer estable. Para sistemas externos, utiliza la ruta del webhook con su clave API.

¿Por qué mis cambios de umbral no se muestran en la pantalla de análisis?
Los resultados del análisis se almacenan en caché, durante una hora por defecto. Actualiza el análisis, o acorta la caché con los filtros de duración de caché, y se aplicarán los nuevos umbrales.

¿Necesitas ayuda?

Si tienes alguna pregunta o encuentras algún problema, estamos aquí para ayudarte.

¿Ha sido útil este artículo?

Artículos relacionados

¿Necesitas Soporte?

¿No encuentras la respuesta que buscas?
Contactar con Soporte
Completa tu compra