SaveTo Wishlist para WooCommerce
Empezar
Cómo extender SaveTo Wishlist 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 con hooks y la API REST
  1. Inicio
  2. Base de Conocimiento
  3. Lista de Deseos
  4. Cómo extender SaveTo Wishlist con hooks y la API REST

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

¿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.php de 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.

HookTipoArgumentosLo que hace
stwlite_wishlist_button_htmlFiltro$button_html, $product, $placement, $style, $button_labelFiltra 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_htmlFiltro$button_html, $product, $placement, $style, $color_optionsFiltra el botón en las páginas de tienda y archivo.
stwlite_wishlist_button_product_htmlFiltro$button_html, $product, $placement, $style, $color_optionsFiltra 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_htmlFiltro$button_htmlFiltra el botón de la página del carrito que guarda todo el carrito.
stwlite_wishlist_button_cart_item_htmlFiltro$button_html, $product, $style, $color_optionsFiltra el botón por artículo en el carrito.
stwlite_wishlist_button_show_buttonFiltro$show (por defecto true), $productDevuelve false para ocultar el botón de un producto.
stwlite_wishlist_button_allow_product_multiple_listsFiltro$allow (por defecto true), $productDevuelve false para eliminar el desplegable “Elegir lista” del botón.
stwlite_before_wishlist_button_shop_page, stwlite_after_wishlist_button_shop_pageAcciónNingunoSe ejecuta antes y después de que se muestre el botón de la página de la tienda.
stwlite_allowed_button_htmlFiltro$allowed_htmlFiltra 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.

HookTipoArgumentosLo que hace
stwlite_wishlist_button_shop_placementFiltro$placementUbicación en las páginas de la tienda y de archivo.
stwlite_wishlist_button_product_placementFiltro$placementUbicación en las páginas de producto individuales.
stwlite_wishlist_button_shop_style, stwlite_wishlist_button_product_style, stwlite_wishlist_button_cart_styleFiltro$styleEstilo del botón para cada tipo de página.
stwlite_wishlist_button_shop_label, stwlite_wishlist_button_selected_shop_label, stwlite_wishlist_button_cart_labelFiltro$labelTexto 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_optionsFiltro$color_optionsLa 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.

HookTipoArgumentosLo que hace
stwlite_collection_dataFiltro$collectionFiltra 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_dataFiltro$dataFiltra la matriz de objetos de listas de deseos devuelta para una lista de listas de deseos.
stwlite_single_collection_dataFiltro$dataFiltra 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_dataFiltro$dataFiltra la matriz de objetos de artículos para una lista de deseos.
stwlite_all_wishlistsFiltro$collections, $paramsFiltra el resultado de la lista (data, total, currentPage) antes de que el frontend lo devuelva.
stwlite_collection_data_to_updateFiltro$data, $paramsFiltra los valores de las columnas justo antes de que el plugin escriba una lista de deseos en la base de datos.
stwlite_optionsFiltro$optionsFiltra 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.

HookTipoArgumentosLo que hace
stwlite_user_wishlist_accessFiltro$granted (predeterminado null), $data, $user_id, $requestDevuelve 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_wishlistFiltro$owns, $collection_id, $user_id, $collectionSi el usuario actual posee la lista de deseos. Solo se ejecuta para una lista de deseos que existe.
stwlite_show_all_wishlists_for_adminFiltro$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.

HookTipoArgumentosCuándo se dispara
stwlite_before_product_added_to_wishlistAcción$product_id, $quantity, $collection_id, $user_idAntes 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_wishlistAcción$product_id, $quantity, $collection_id, $user_id, $addedDespué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_wishlistAcción$product_id, $collection_id, $variation_idsAntes de que un producto se elimine de una lista de deseos con el botón.
stwlite_after_product_removed_from_wishlistAcción$product_id, $collection_id, $variation_idsDespué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_cartAcción$collection_id, $product_id, $quantity, $variation_idAntes y después de que un artículo de la lista de deseos se mueva al carrito.
stwlite_before_save_collectionAcción$dataAntes de que se escriba una lista de deseos. $data es la matriz de valores de columna.
stwlite_after_save_collectionAcción$data, $paramsDespué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_itemAcción$dataDespués de que se inserta o actualiza una fila de artículo.
stwlite_before_delete_collectionsAcción$idsAntes de que se eliminen las listas de deseos.
stwlite_after_delete_collectionsAcción$ids, $deletedDespué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.

HookTipoArgumentosLo que hace
stwlite_admin_setting_tabsFiltro$tabsFiltro final para la matriz completa de pestañas.
stwlite_admin_setting_controlsFiltro$controlsFiltro final para la matriz completa de controles.
stwlite_admin_data_tablesFiltro$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_tabsFiltro$tabsFiltros 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_tabFiltro$tabFiltra una pestaña secundaria. Las variantes _sections de estos nombres filtran las secciones de esa pestaña.
stwlite_admin_setting_default_controlsFiltro$controlsFiltro 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_controlsFiltro$controlsFiltra 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 $options cuando el payload de la configuración contiene una clave llamada action. Devuelve la matriz de respuesta con status y message.
  • stwlite_trigger_{action} es un filtro que recibe los parámetros de la solicitud como $params cuando se llama a la ruta de acción. Devuelve una matriz con status y message, y una URL de redirect opcional.

Traducciones del frontend

HookTipoArgumentosLo que hace
stwlite_frontend_translationsFiltro$i18nFiltra 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.

HookTipoArgumentosLo que hace
stwlite_usage_checkin_dataFiltro$dataFiltra el payload completo de la verificación.
stwlite_usage_settingsFiltro$settingsFiltra los pares de nombre y valor de la configuración en el payload.
stwlite_usage_effectivenessFiltro$data, $start, $endFiltra 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/endpointsUsuarios 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/wishlistsIgual 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-itemsUsuarios 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-productsSolo 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 actionParámetros que leeGancho que dispara primero
add_wishlistname, description, status, is_default, is_public, url_code, emails, user_ids, allowed_roles, allowed_edit_emailsstwlite_before_api_save_collection_add_wishlist con $data
update_wishlistid 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_wishlistidsNinguno
add_wishlist_itemcollection_id, product_id, variation_id, quantity, priority, notesstwlite_before_api_save_collection_item_add_wishlist_item con $data
update_wishlist_itemid más los campos de add_wishlist_itemstwlite_before_api_save_collection_item_update_wishlist_item con $data
move_wishlist_itemid, collection_idstwlite_before_api_save_collection_item_move_wishlist_item con $data
remove_wishlist_itemcollection_id, product_id, variation_idstwlite_after_product_removed_from_wishlist se dispara después de la eliminación con $product_id, $collection_id, $variation_ids
update_wishlist_item_positionlistasNinguno

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:

HookTipoArgumentosLo que hace
stwlite_api_user_permissions_checkFiltro$response, $requestResultado final para POST /frontend/endpoints y GET /frontend/endpoints/wishlists. Devuelve true o un WP_Error.
stwlite_api_user_force_accessFiltro$force (predeterminado false), $requestDevuelve true para permitir que un llamador no registrado pase por esas dos rutas.
stwlite_check_any_user_has_permissionFiltro$response, $requestResultado final para la ruta wishlist-items.
stwlite_check_any_user_has_permission_validationFiltro$valid (predeterminado false), $data, $requestDevuelve true para permitir que un llamador no registrado lea una lista de deseos que no es pública.
stwlite_check_guest_permissionFiltro$response, $requestResultado final para la ruta guest-wishlist-products.
stwlite_guest_wishlist_products_dataFiltro$products, $product_dataFiltra 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 rutaLo que hace
POST /admin/wishlistsCrea 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/wishlistsElimina 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/collectionsDevuelve 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/itemsRuta de marcador de posición que devuelve una lista de data vacía.
POST /admin/settings/saveGuarda 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/actionEjecuta el filtro stwlite_trigger_{action} para el parámetro action.
GET /admin/importer/sourcesEnumera 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/importInicia 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?

¿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