¿Estás creando una integración personalizada, cambiando el aspecto del botón de la lista de deseos o reaccionando cuando un cliente guarda un producto? SaveTo Wishlist te proporciona filtros y acciones de WordPress para cada una de estas tareas, además de una API REST para leer y modificar listas de deseos. Este artículo enumera los hooks y las rutas que vienen con SaveTo Wishlist Lite 1.1.8, con los argumentos que cada uno recibe y un ejemplo funcional para los casos comunes.
Antes de empezar
- Necesitas tener activos en el sitio SaveTo Wishlist Lite y WooCommerce. SaveTo Wishlist Pro y Registry añaden sus propios hooks, que no se cubren aquí.
- Cada nombre de hook comienza con
stwlite_. - Coloca tu código en un pequeño plugin personalizado o en un plugin de fragmentos de código. Añade los filtros de ubicación (ver más abajo) en un archivo de plugin, no en el archivo
functions.phpde un tema. - Cada hook y ruta en este artículo existe en SaveTo Wishlist Lite 1.1.8. Un hook que no aparece aquí no forma parte de la interfaz pública, así que no dependas de él.
Hooks
Cada hook a continuación enumera su tipo, los argumentos que recibe y lo que hace. Cuando registres una función de devolución de llamada que acepte más de un argumento, pasa el recuento de argumentos como cuarto parámetro de add_filter() o add_action(), como muestran los ejemplos.
Salida del botón
Estos filtros cambian el marcado del botón de la lista de deseos antes de que se imprima. El plugin pasa el marcado final a través de wp_kses(), por lo que las etiquetas y atributos que no estén en su lista de permitidos se eliminan. Para permitir más etiquetas, usa el filtro stwlite_allowed_button_html, que recibe la matriz de la lista de permitidos.
| Hook | Tipo | Argumentos | Lo que hace |
|---|---|---|---|
stwlite_wishlist_button_html | Filtro | $button_html, $product, $placement, $style, $button_label | Filtra el marcado de cada botón de lista de deseos que crea el plugin. Se ejecuta incluso cuando el botón está oculto, en cuyo caso $button_html es una cadena vacía. |
stwlite_wishlist_button_shop_html | Filtro | $button_html, $product, $placement, $style, $color_options | Filtra el botón en las páginas de tienda y archivo. |
stwlite_wishlist_button_product_html | Filtro | $button_html, $product, $placement, $style, $color_options | Filtra el botón en las páginas de producto individuales. Si tu función de devolución de llamada devuelve una cadena vacía, no se imprime ningún botón. |
stwlite_wishlist_cart_button_html | Filtro | $button_html | Filtra el botón de la página del carrito que guarda todo el carrito. |
stwlite_wishlist_button_cart_item_html | Filtro | $button_html, $product, $style, $color_options | Filtra el botón por artículo en el carrito. |
stwlite_wishlist_button_show_button | Filtro | $show (por defecto true), $product | Devuelve false para ocultar el botón de un producto. |
stwlite_wishlist_button_allow_product_multiple_lists | Filtro | $allow (por defecto true), $product | Devuelve false para eliminar el desplegable “Elegir lista” del botón. |
stwlite_before_wishlist_button_shop_page, stwlite_after_wishlist_button_shop_page | Acción | Ninguno | Se ejecuta antes y después de que se muestre el botón de la página de la tienda. |
stwlite_allowed_button_html | Filtro | $allowed_html | Filtra la lista de permitidos de wp_kses() para el marcado del botón. |
Este ejemplo añade una breve nota después del botón para los productos en oferta:
add_filter( 'stwlite_wishlist_button_html', function ( $button_html, $product, $placement, $style, $button_label ) {
if ( '' === $button_html || ! $product instanceof WC_Product || ! $product->is_on_sale() ) {
return $button_html;
}
return $button_html . '<span class="my-sale-note">On sale</span>';
}, 10, 5 );
Ubicación, estilo y etiquetas del botón
Estos filtros cambian dónde aparece el botón y cómo se ve. Cada uno recibe la configuración guardada y devuelve el valor a utilizar.
| Hook | Tipo | Argumentos | Lo que hace |
|---|---|---|---|
stwlite_wishlist_button_shop_placement | Filtro | $placement | Ubicación en las páginas de la tienda y de archivo. |
stwlite_wishlist_button_product_placement | Filtro | $placement | Ubicación en las páginas de producto individuales. |
stwlite_wishlist_button_shop_style, stwlite_wishlist_button_product_style, stwlite_wishlist_button_cart_style | Filtro | $style | Estilo del botón para cada tipo de página. |
stwlite_wishlist_button_shop_label, stwlite_wishlist_button_selected_shop_label, stwlite_wishlist_button_cart_label | Filtro | $label | Texto del botón para el estado no guardado, el estado guardado y el botón del carrito. |
stwlite_wishlist_button_shop_color_options, stwlite_wishlist_button_product_color_options, stwlite_wishlist_button_cart_color_options | Filtro | $color_options | La matriz de configuración de color para cada tipo de página. |
Las ubicaciones de la tienda son top_right, top_left, above_title, below_title, above_button, below_button y disable. Las ubicaciones de la página de producto son top_image_right, top_image_left, top_cart, bottom_cart, inline_cart, top_title, bottom_title y disable. El plugin lee la ubicación una vez, cuando se inicia en el hook setup_theme con prioridad 100. Por lo tanto, un filtro de ubicación debe añadirse antes de ese punto, así que regístrelo en un archivo de plugin y no en el archivo functions.php de un tema. Los filtros de estilo, etiqueta y color se ejecutan cada vez que se renderiza un botón, por lo que funcionan desde cualquier código.
add_filter( 'stwlite_wishlist_button_product_placement', function ( $placement ) {
return 'bottom_cart';
} );
Para la pantalla de configuración correspondiente, consulta Cómo personalizar la ubicación y los estilos del botón de la lista de deseos en WooCommerce.
Datos de la lista de deseos
Estos filtros modifican los datos de la lista de deseos tal como los lee el plugin. Se ejecutan en muchas solicitudes, incluidas las comprobaciones de propiedad y permisos, así que mantén tus callbacks rápidos. No modifiques los valores de id, user_id, status o is_public, ya que el plugin los lee para decidir quién puede ver una lista de deseos.
| Hook | Tipo | Argumentos | Lo que hace |
|---|---|---|---|
stwlite_collection_data | Filtro | $collection | Filtra la fila de la base de datos sin procesar cada vez que se carga una lista de deseos por ID, código de URL o nombre. |
stwlite_collections_data | Filtro | $data | Filtra la matriz de objetos de listas de deseos devuelta para una lista de listas de deseos. |
stwlite_single_collection_data | Filtro | $data | Filtra un único objeto de lista de deseos después de guardarlo, y en la ruta de la lista de deseos del administrador. |
stwlite_collection_items_data | Filtro | $data | Filtra la matriz de objetos de artículos para una lista de deseos. |
stwlite_all_wishlists | Filtro | $collections, $params | Filtra el resultado de la lista (data, total, currentPage) antes de que el frontend lo devuelva. |
stwlite_collection_data_to_update | Filtro | $data, $params | Filtra los valores de las columnas justo antes de que el plugin escriba una lista de deseos en la base de datos. |
stwlite_options | Filtro | $options | Filtra la matriz de opciones que el plugin pasa al script de frontend de la lista de deseos. |
Este ejemplo elimina la descripción de los objetos de lista de deseos en las respuestas de la lista:
add_filter( 'stwlite_collections_data', function ( $collections ) {
foreach ( $collections as $collection ) {
$collection->description = '';
}
return $collections;
} );
Acceso a la lista de deseos del usuario
Estos filtros deciden quién puede leer o poseer una lista de deseos. Para una solicitud de lectura, el plugin primero permite a los administradores con la capacidad manage_options, luego al propietario de la lista de deseos, luego a las listas de deseos publicadas públicas, luego a sus propias reglas de uso compartido. Solo después de esas comprobaciones llama a stwlite_user_wishlist_access.
| Hook | Tipo | Argumentos | Lo que hace |
|---|---|---|---|
stwlite_user_wishlist_access | Filtro | $granted (predeterminado null), $data, $user_id, $request | Devuelve true para permitir el acceso de lectura, false para denegarlo, o null para que el plugin decida. $data es el objeto de la lista de deseos, $user_id es 0 para un invitado y $request es la solicitud REST cuando la hay. |
stwlite_user_owns_wishlist | Filtro | $owns, $collection_id, $user_id, $collection | Si el usuario actual posee la lista de deseos. Solo se ejecuta para una lista de deseos que existe. |
stwlite_show_all_wishlists_for_admin | Filtro | $show (por defecto false) | Devuelve true para permitir que los administradores vean todas las listas de deseos de los clientes en la ruta de listas de deseos del frontend. |
Este ejemplo permite a los gerentes de la tienda leer cualquier lista de deseos:
add_filter( 'stwlite_user_wishlist_access', function ( $granted, $wishlist, $user_id, $request ) {
if ( $user_id && user_can( $user_id, 'manage_woocommerce' ) ) {
return true;
}
return $granted;
}, 10, 4 );
Acciones de la lista de deseos
Utiliza estas acciones para reaccionar cuando algo cambie, por ejemplo, para sincronizar datos con un CRM o escribir una entrada de registro.
| Hook | Tipo | Argumentos | Cuándo se dispara |
|---|---|---|---|
stwlite_before_product_added_to_wishlist | Acción | $product_id, $quantity, $collection_id, $user_id | Antes de que un producto se guarde en una lista de deseos desde el botón o las capacidades de IA del plugin. |
stwlite_after_product_added_to_wishlist | Acción | $product_id, $quantity, $collection_id, $user_id, $added | Después de ese guardado. $added es false cuando no se escribió nada. $collection_id es el valor de la solicitud sin procesar y a menudo es 0, lo que significa la lista de deseos predeterminada. |
stwlite_before_product_removed_from_wishlist | Acción | $product_id, $collection_id, $variation_ids | Antes de que un producto se elimine de una lista de deseos con el botón. |
stwlite_after_product_removed_from_wishlist | Acción | $product_id, $collection_id, $variation_ids | Después de que un producto se elimina de una lista de deseos, desde el botón, la API REST o las capacidades de IA. |
stwlite_before_product_added_to_cart, stwlite_after_product_added_to_cart | Acción | $collection_id, $product_id, $quantity, $variation_id | Antes y después de que un artículo de la lista de deseos se mueva al carrito. |
stwlite_before_save_collection | Acción | $data | Antes de que se escriba una lista de deseos. $data es la matriz de valores de columna. |
stwlite_after_save_collection | Acción | $data, $params | Después de que se escribe una lista de deseos. $data es el objeto de la lista de deseos guardado. |
stwlite_after_insert_collection_item, stwlite_after_update_collection_item | Acción | $data | Después de que se inserta o actualiza una fila de artículo. |
stwlite_before_delete_collections | Acción | $ids | Antes de que se eliminen las listas de deseos. |
stwlite_after_delete_collections | Acción | $ids, $deleted | Después de que se eliminan las listas de deseos. $deleted es el número de listas de deseos eliminadas. |
Este ejemplo almacena el último producto que un cliente guardó en sus metadatos de usuario:
add_action( 'stwlite_after_product_added_to_wishlist', function ( $product_id, $quantity, $collection_id, $user_id, $added ) {
if ( ! $added || ! $user_id ) {
return;
}
update_user_meta( $user_id, 'my_last_wishlisted_product', (int) $product_id );
}, 10, 5 );
Pestañas y controles de configuración del administrador
La pantalla de configuración crea sus pestañas y campos a partir de matrices. Utilice estos filtros para agregar su propia pestaña, sección o campo, o para cambiar uno existente.
| Hook | Tipo | Argumentos | Lo que hace |
|---|---|---|---|
stwlite_admin_setting_tabs | Filtro | $tabs | Filtro final para la matriz completa de pestañas. |
stwlite_admin_setting_controls | Filtro | $controls | Filtro final para la matriz completa de controles. |
stwlite_admin_data_tables | Filtro | $data_tables (matriz vacía por defecto) | Registra tablas de datos para la aplicación de configuración. |
stwlite_admin_setting_default_tabs, stwlite_admin_setting_default_parent_tabs, stwlite_admin_setting_default_child_tabs | Filtro | $tabs | Filtros anteriores para la matriz de pestañas, la pestaña de nivel superior y las pestañas secundarias. |
stwlite_admin_setting_default_general_tab, stwlite_admin_setting_default_wishlist_page_tab, stwlite_admin_setting_default_wishlist_guest_tab, stwlite_admin_setting_default_wishlist_button_tab, stwlite_admin_setting_default_importer_tab | Filtro | $tab | Filtra una pestaña secundaria. Las variantes _sections de estos nombres filtran las secciones de esa pestaña. |
stwlite_admin_setting_default_controls | Filtro | $controls | Filtro anterior para la matriz de controles. |
stwlite_admin_setting_default_general_tab_controls, stwlite_admin_setting_default_wishlist_page_tab_controls, stwlite_admin_setting_default_wishlist_guest_tab_controls, stwlite_admin_setting_default_wishlist_button_tab_controls | Filtro | $controls | Filtra los controles de una pestaña. |
Las pestañas se encuentran debajo de la clave principal saveto_wishlist. Las claves de las pestañas secundarias son general, wishlist_page, wishlist_guest, wishlist_button y importer. Cada pestaña secundaria contiene sort, key, label, icon y una matriz sections. La matriz de controles tiene como clave $controls[ 'saveto_wishlist' ][ $tab_key ][ $section_key ], y cada sección contiene una lista de matrices de controles. Un control tiene un type (por ejemplo, switch o select), una label, un id que es el nombre de la opción, una description y un default. Los controles de tipo switch utilizan los valores yes y no.
Este ejemplo agrega un interruptor a la pestaña General. Asume la clave de sección save_to_wishlist_settings, que es la primera sección de esa pestaña.
add_filter( 'stwlite_admin_setting_default_general_tab_controls', function ( $controls ) {
$controls['save_to_wishlist_settings'][] = array(
'type' => 'switch',
'label' => __( 'Log wishlist adds', 'my-plugin' ),
'id' => 'my_plugin_log_wishlist_adds',
'description' => __( 'If Yes, write an entry to the debug log when a customer saves a product.', 'my-plugin' ),
'options' => array(
'yes' => __( 'Yes', 'my-plugin' ),
'no' => __( 'No', 'my-plugin' ),
),
'default' => get_option( 'my_plugin_log_wishlist_adds', 'no' ),
);
return $controls;
} );
La pantalla de configuración guarda cada valor de control a través de la ruta de configuración del administrador descrita más adelante en este artículo. Dos filtros dinámicos le permiten manejar una guarda o un botón usted mismo:
stwlite_group_settings_{action}es un filtro que recibe los valores guardados como$optionscuando el payload de la configuración contiene una clave llamadaaction. Devuelve la matriz de respuesta constatusymessage.stwlite_trigger_{action}es un filtro que recibe los parámetros de la solicitud como$paramscuando se llama a la ruta de acción. Devuelve una matriz constatusymessage, y una URL deredirectopcional.
Traducciones del frontend
| Hook | Tipo | Argumentos | Lo que hace |
|---|---|---|---|
stwlite_frontend_translations | Filtro | $i18n | Filtra el mapa de claves de traducción a cadenas traducidas que el plugin pasa a la aplicación de la lista de deseos. Devuelve la matriz. Se ignora un valor de retorno no matricial. |
La página de la lista de deseos carga estas cadenas dos veces por solicitud, por lo que su callback debe fusionar en un mapa y evitar trabajos pesados. Este ejemplo cambia una cadena. Utilice una clave que ya exista en la matriz.
add_filter( 'stwlite_frontend_translations', function ( $i18n ) {
$i18n['just_now'] = __( 'a moment ago', 'my-plugin' );
return $i18n;
} );
Datos de seguimiento de uso
Cuando una tienda ha permitido el seguimiento de uso, el plugin envía una verificación periódica. Estos filtros permiten que un plugin complementario añada datos a esos datos. Los valores deben ser escalares y no deben contener credenciales ni datos personales.
| Hook | Tipo | Argumentos | Lo que hace |
|---|---|---|---|
stwlite_usage_checkin_data | Filtro | $data | Filtra el payload completo de la verificación. |
stwlite_usage_settings | Filtro | $settings | Filtra los pares de nombre y valor de la configuración en el payload. |
stwlite_usage_effectiveness | Filtro | $data, $start, $end | Filtra las métricas semanales de efectividad. $start y $end son fechas UTC en formato Y-m-d H:i:s. |
La configuración "Seguimiento de uso" en la pestaña General controla el consentimiento. Si una tienda la establece en No, el plugin no informa, independientemente de lo que devuelvan sus filtros.
API REST
Todas las rutas utilizan el espacio de nombres saveto-wishlist/v1, por lo que la ruta completa es https://your-site.com/wp-json/saveto-wishlist/v1/ seguida de la ruta en las tablas. Siguen la autenticación normal de la API REST de WordPress. El código del navegador envía la cabecera X-WP-Nonce para un usuario conectado, y otros clientes pueden usar una contraseña de aplicación con autenticación HTTP Basic. Una solicitud rechazada devuelve el error rest_forbidden_context con estado 401 para un llamador desconectado o 403 para uno conectado.
Rutas de cliente
Estas rutas potencian el botón de la lista de deseos y la página de la lista de deseos.
| Método y ruta | ¿Quién puede llamarlo? | Lo que hace |
|---|---|---|
POST /frontend/endpoints | Usuarios conectados. Se deniega el acceso a invitados a menos que un filtro de permisos lo permita. | Ejecuta una acción de lista de deseos elegida por el parámetro action. Consulte la tabla de acciones a continuación. |
GET /frontend/endpoints/wishlists | Igual que arriba. | Devuelve data, total y currentPage para las listas de deseos. Los clientes ven sus propias listas de deseos. Pasar is_public=true lista las listas de deseos públicas de otros clientes. |
GET /frontend/endpoints/wishlist-items | Usuarios con sesión iniciada. Un invitado solo puede leer una lista de deseos pública nombrada por collection_id. | Devuelve los artículos de la lista de deseos en el parámetro collection_id requerido. El llamador también debe tener permiso para ver esa lista de deseos, o la ruta devuelve un error 401 o 403. |
POST /frontend/endpoints/guest-wishlist-products | Solo invitados. Un usuario con sesión iniciada recibe un error. | Toma un array products de objetos con productId, quantity, priority y addedAt. Devuelve los datos del producto coincidentes para una lista de deseos almacenada en el navegador. |
La ruta POST /frontend/endpoints siempre responde con HTTP 200 y un campo status, así que comprueba status en el cuerpo. Un llamador que no posee la lista de deseos recibe status establecido en error. Solo los usuarios con la capacidad manage_options pueden escribir en la lista de deseos de otro usuario.
Valor de action | Parámetros que lee | Gancho que dispara primero |
|---|---|---|
add_wishlist | name, description, status, is_default, is_public, url_code, emails, user_ids, allowed_roles, allowed_edit_emails | stwlite_before_api_save_collection_add_wishlist con $data |
update_wishlist | id más cualquier campo de add_wishlist. Solo se actualizan los campos que envías. | stwlite_before_api_save_collection_update_wishlist con $data |
remove_wishlist | ids | Ninguno |
add_wishlist_item | collection_id, product_id, variation_id, quantity, priority, notes | stwlite_before_api_save_collection_item_add_wishlist_item con $data |
update_wishlist_item | id más los campos de add_wishlist_item | stwlite_before_api_save_collection_item_update_wishlist_item con $data |
move_wishlist_item | id, collection_id | stwlite_before_api_save_collection_item_move_wishlist_item con $data |
remove_wishlist_item | collection_id, product_id, variation_id | stwlite_after_product_removed_from_wishlist se dispara después de la eliminación con $product_id, $collection_id, $variation_ids |
update_wishlist_item_position | listas | Ninguno |
Esta solicitud lista las listas de deseos de la cuenta que posee la contraseña de la aplicación:
curl -u "username:application-password" \
"https://your-site.com/wp-json/saveto-wishlist/v1/frontend/endpoints/wishlists"
Estos filtros cambian quién pasa las comprobaciones de la ruta del cliente y qué devuelve la ruta de invitado:
| Hook | Tipo | Argumentos | Lo que hace |
|---|---|---|---|
stwlite_api_user_permissions_check | Filtro | $response, $request | Resultado final para POST /frontend/endpoints y GET /frontend/endpoints/wishlists. Devuelve true o un WP_Error. |
stwlite_api_user_force_access | Filtro | $force (predeterminado false), $request | Devuelve true para permitir que un llamador no registrado pase por esas dos rutas. |
stwlite_check_any_user_has_permission | Filtro | $response, $request | Resultado final para la ruta wishlist-items. |
stwlite_check_any_user_has_permission_validation | Filtro | $valid (predeterminado false), $data, $request | Devuelve true para permitir que un llamador no registrado lea una lista de deseos que no es pública. |
stwlite_check_guest_permission | Filtro | $response, $request | Resultado final para la ruta guest-wishlist-products. |
stwlite_guest_wishlist_products_data | Filtro | $products, $product_data | Filtra la lista de productos que devuelve la ruta de invitado. |
Rutas de administrador
Las rutas a continuación sirven a las propias pantallas de administración del plugin y pueden cambiar entre versiones. Prefiera los hooks anteriores para integraciones. Cada ruta de administrador requiere la capacidad manage_options. Use el filtro stwlite_api_admin_permissions_check ($response, $request) para cambiar eso, y tenga cuidado al ampliar el acceso, ya que estas rutas pueden escribir opciones del sitio y eliminar listas de deseos.
| Método y ruta | Lo que hace |
|---|---|
POST /admin/wishlists | Crea o actualiza una lista de deseos a partir del cuerpo de la solicitud. Devuelve un error 422 si agrega elementos que aún no se han guardado a una lista de deseos cuyo estado es draft. |
DELETE /admin/wishlists | Elimina las listas de deseos en el parámetro ids. La respuesta muestra count y skipped. Se omite una lista de deseos cuando es la última lista de deseos de su propietario. |
GET /admin/wishlists/collections | Devuelve una página de listas de deseos con data, total y currentPage. |
GET /admin/wishlists/collection/{id} | Devuelve una lista de deseos por ID numérico. |
GET /admin/wishlists/items | Ruta de marcador de posición que devuelve una lista de data vacía. |
POST /admin/settings/save | Guarda la configuración. El cuerpo es una lista de objetos con key y value. Un valor de true o false se almacena como yes o no. |
POST /admin/settings/action | Ejecuta el filtro stwlite_trigger_{action} para el parámetro action. |
GET /admin/importer/sources | Enumera los plugins de lista de deseos que el importador detectó en el sitio. |
GET /admin/importer/preview/{source} | Devuelve los recuentos de elementos y una vista previa de una fuente. |
POST /admin/importer/import | Inicia una importación. Toma source y un objeto opcional options (merge_existing, preserve_default, preserve_privacy, batch_number, job_id). Un usuario puede iniciar una importación cada 300 segundos. |
GET /admin/importer/import/{job_id} | Devuelve el progreso de un trabajo de importación. |
DELETE /admin/importer/import/{job_id} | Cancela un trabajo de importación. |
Las fuentes de importación integradas son yith, ti, moreconvert y wpc. Utilice el filtro stwlite_available_importers, que recibe y devuelve una matriz que mapea un slug de fuente a un nombre de clase de importador, para registrar otra.
Preguntas frecuentes
¿Por qué mi filtro de ubicación no hace nada?
El plugin lee la ubicación cuando se inicia en el hook setup_theme con prioridad 100. Agregue el filtro desde un archivo de plugin. Un archivo functions.php del tema se carga después de ese punto.
¿Por qué mi marcado de botón pierde una etiqueta o atributo?
El plugin procesa el marcado del botón a través de wp_kses(). Agregue la etiqueta o el atributo a la lista de permitidos con el filtro stwlite_allowed_button_html.
¿Por qué la ruta de guardado devuelve HTTP 200 para una solicitud rechazada?
POST /frontend/endpoints siempre responde con HTTP 200 y pone el resultado en el campo status del cuerpo. Lea status y message en lugar del código HTTP.
¿Qué sigue?
- Cómo extender SaveTo Wishlist Pro con hooks y la API REST
- Cómo extender SaveTo Wishlist Registry con hooks y la API REST
- Cómo usar las habilidades de IA en SaveTo Wishlist
¿Necesitas ayuda?
Si tienes alguna pregunta o encuentras algún problema, estamos aquí para ayudarte.
- Usuarios premium: Abrir un ticket de soporte
- Usuarios gratuitos: Visita nuestro foro comunitario
