Visser Labs – Plugins de WooCommerce

  1. Inicio
  2. Base de conocimiento
  3. Inicio de sesión personalizado para WooCommerce
  4. Ganchos y filtros disponibles en Custom Login para WooCommerce

Ganchos y filtros disponibles en Custom Login para WooCommerce

Quieres que los clientes aterricen en una página específica después de iniciar sesión, o necesitas añadir un enlace o un script a la página de inicio de sesión. Custom Login para WooCommerce te proporciona ganchos para ambas cosas, así que no tienes que editar los archivos del plugin. También tiene un punto final de la API REST que lee y actualiza la configuración del plugin desde el código.

Este artículo cubre el filtro clwc_login_redirect, las acciones clwc_after_login_form y clwc_login_footer, y el punto final de la API REST /settings. También enumera tres ganchos más pequeños en una tabla breve. La configuración de la página de inicio de sesión en sí se cubre en Introducción a Custom Login para WooCommerce.

Esta es una referencia para desarrolladores. Asume que te sientes cómodo añadiendo PHP a través de un plugin personalizado o el archivo functions.php de tu tema hijo. Si los ganchos son nuevos para ti, empieza con el Manual de Plugins de WordPress sobre ganchos.

Prerrequisitos

RequisitoDetalles
ComplementoCustom Login para WooCommerce 1.0.3 o posterior, instalado y activo
WooCommerceVersión 6.0 o posterior, instalada y activa
AccesoUna forma de añadir código PHP, como un plugin personalizado o un tema hijo
Acceso a la API RESTUna cuenta con la capacidad manage_woocommerce para el punto final de la API REST

Cómo encajan los ganchos en la página de inicio de sesión

El plugin sirve tu página /login desde su propia plantilla independiente. Esa plantilla no carga la cabecera ni el pie de página de tu tema, y no llama a wp_head() ni a wp_footer(). Por lo tanto, una devolución de llamada añadida a wp_head o wp_footer nunca se ejecuta en esta página. Utiliza los ganchos propios del plugin a continuación en su lugar.

Ten en cuenta que el filtro de redirección se ejecuta en el envío del formulario, mientras que las dos acciones se ejecutan cuando se muestra la página de inicio de sesión.

Filtro: clwc_login_redirect

Este filtro cambia a dónde va un cliente justo después de iniciar sesión correctamente. No se ejecuta cuando un inicio de sesión falla.

apply_filters( 'clwc_login_redirect', $redirect_to, $user );
ParámetroTipoDescripción
$redirect_tocadenaLa URL a la que se va a enviar al cliente
$userWP_UserLa cuenta que acaba de iniciar sesión

Devuelve la URL que deseas. El valor inicial de $redirect_to es el valor de redirect_to pasado a la página de inicio de sesión, por ejemplo tutienda.com/login/?redirect_to=.... Si no hay ninguno, es la URL de la página Mi cuenta de WooCommerce.

Esto es lo que sucede después de que tu devolución de llamada retorna:

  1. El filtro woocommerce_login_redirect propio de WooCommerce se ejecuta a continuación. Cualquier devolución de llamada en ese filtro ve tu resultado y puede cambiarlo de nuevo.
  2. El plugin comprueba la URL final. Si apunta a otro dominio que WordPress no permite, el plugin envía al cliente a Mi cuenta en su lugar.
  3. El plugin redirige al cliente.

Debido a que woocommerce_login_redirect se ejecuta después de clwc_login_redirect, otro plugin en ese filtro puede anular tu redirección. Si tu redirección parece ser ignorada, comprueba si hay otros plugins que se conecten a woocommerce_login_redirect.

Ejemplo: enviar administradores de la tienda al panel de control

add_filter( 'clwc_login_redirect', function ( $redirect_to, $user ) {
	if ( in_array( 'shop_manager', (array) $user->roles, true ) ) {
		return admin_url();
	}

	return $redirect_to;
}, 10, 2 );

El 10 es la prioridad de la función de devolución de llamada, y el 2 indica a WordPress que tu función de devolución de llamada acepta dos parámetros. Sin el 2, no recibes $user.

Ambas acciones te permiten insertar tu propio HTML en la página de inicio de sesión. Ninguna de ellas pasa parámetros, por lo que tu función de devolución de llamada no necesita argumentos. Muestra tu contenido con echo.

AcciónDónde se dispara
clwc_after_login_formDirectamente después de la etiqueta de cierre </form>, todavía dentro del panel del formulario de inicio de sesión. El contenido aparece debajo del formulario.
clwc_login_footerDespués de todo el diseño de dos paneles, cerca del final de la página. El contenido no está dentro de ninguno de los paneles.

Ejemplo: añadir un enlace debajo del formulario de inicio de sesión

add_action( 'clwc_after_login_form', function () {
	echo '<p><a href="' . esc_url( home_url( '/become-a-customer/' ) ) . '">Need an account? Apply here.</a></p>';
} );

Ejemplo: añadir una línea de texto al pie de página

add_action( 'clwc_login_footer', function () {
	echo '<p style="text-align:center;">Need help? Call us on 1300 000 000.</p>';
} );

clwc_login_footer se dispara fuera del panel del formulario, por lo que tu propio CSS decide dónde aparece el contenido. Para contenido que pertenece al formulario, usa clwc_after_login_form.

Otros ganchos en la página de inicio de sesión

Estos ganchos son más pequeños y menos comunes. Funcionan de la misma manera que las acciones y filtros anteriores.

GanchoTipoQué hace
clwc_logout_redirectFiltroCambia a dónde van los clientes después de cerrar sesión. Recibe la URL predeterminada, que es /login/ con ?logged_out=true añadido, y devuelve la URL que deseas.
clwc_login_headAcciónSe dispara dentro de la etiqueta <head> de la página, después de los estilos del plugin. Úsalo para añadir una hoja de estilos o una etiqueta meta.
clwc_login_enqueue_scriptsAcciónSe dispara cerca del final de la página. Úsalo para poner en cola scripts para la página de inicio de sesión.

El formulario de inicio de sesión también dispara los ganchos de inicio de sesión estándar de WooCommerce: woocommerce_login_form_start, woocommerce_login_form y woocommerce_login_form_end. Por eso la mayoría de los plugins CAPTCHA y de seguridad que funcionan en el formulario de inicio de sesión de WooCommerce también funcionan aquí.

API REST: punto final de configuración

El plugin tiene un punto final de API REST para su configuración. Te permite leer la configuración actual o actualizarla desde el código, por ejemplo, cuando configuras muchas tiendas desde un solo script.

/wp-json/clwc/v1/settings
MétodoQué hace
OBTENERDevuelve toda la configuración, más la lista de rotation_items
POSTActualiza la configuración que envías y devuelve toda la configuración

Quién puede usarlo

Ambos métodos requieren una cuenta iniciada con la capacidad manage_woocommerce. Eso incluye administradores y gerentes de tienda. Cualquier otra persona recibe una respuesta 401 o 403.

Para una solicitud desde el navegador mientras has iniciado sesión, envía la cabecera X-WP-Nonce con un nonce wp_rest. Para una solicitud desde fuera de WordPress, usa una contraseña de aplicación con autenticación básica.

Leer la configuración

curl -u "admin:APPLICATION_PASSWORD" https://yourstore.com/wp-json/clwc/v1/settings

La respuesta es un objeto JSON. Cualquier configuración que aún no hayas guardado se devuelve con su valor predeterminado, excepto logo_url, que se omite de la respuesta hasta que guardes una URL de logotipo.

Actualizar la configuración

Envía un cuerpo JSON solo con los campos que deseas cambiar. Los campos que omites permanecen como están.

curl -X POST -u "admin:APPLICATION_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{"template":"template-2","button_bg":"#e11d48","login_heading":"Welcome back"}' \
  https://yourstore.com/wp-json/clwc/v1/settings

Desde el navegador, puedes usar wp.apiFetch de la misma manera:

wp.apiFetch( {
	path: '/clwc/v1/settings',
	method: 'POST',
	data: { login_button_text: 'Sign in' },
} );

El plugin limpia cada valor antes de guardarlo. Un valor del tipo incorrecto se omite o se guarda como vacío, y la solicitud aún tiene éxito.

CamposValores aceptados y manejo
Campos de color: left_panel_bg, left_panel_text, right_panel_bg, right_panel_text, button_bg, button_text, button_hover_bg, link_color, link_hover_color, input_border, input_focus, promo_button_bg, promo_button_text_color, promo_button_hover_bg, promo_button_borderUn color hexadecimal como #3b82f6. Cualquier otra cosa se guarda como vacío.
Campos de URL: logo_url, promo_button_urlUna URL válida. El plugin la limpia como una URL antes de guardarla.
plantillaUna de template-1, template-2, template-3, template-4, template-5. Otros valores se ignoran.
promo_enabled, enable_rotationyes o no. Otros valores se ignoran.
mobile_promo_displayhide o stack. Otros valores se ignoran.
Campos de texto: login_heading, email_label, password_label, remember_label, login_button_text, lost_password_text, promo_heading, promo_button_textTexto plano. Se eliminan las etiquetas HTML.
promo_contentTexto con HTML básico, como <br>, <p> y <strong>. Se elimina el HTML no seguro.
rotation_itemsUna lista de elementos. Cada elemento puede tener heading, content, button_text, button_url e image_url. Enviar este campo reemplaza toda la lista guardada.

Los campos que no están en la tabla se ignoran. Además, rotation_items reemplaza toda la lista guardada cada vez que la envías, así que incluye todos los elementos que quieras conservar.

Solución de problemas

La API REST devuelve un error 401 o 403
La solicitud no ha iniciado sesión como una cuenta con la capacidad manage_woocommerce. Comprueba que tu contraseña de aplicación pertenece a un administrador o gerente de la tienda. Para solicitudes desde el navegador, comprueba que envías una cabecera X-WP-Nonce válida.
Mi callback clwc_login_redirect se ejecuta, pero los clientes todavía van a la página incorrecta
Otro plugin en woocommerce_login_redirect está cambiando la URL después de la tuya. Comprueba también que la URL pertenece a tu propio sitio. El plugin envía a los clientes a Mi cuenta cuando la URL final apunta a un dominio que WordPress no permite.
Mi callback en clwc_login_redirect no recibe $user
Tu llamada a add_filter() necesita 10, 2 al final, para que WordPress pase ambos parámetros a tu función.
Un color que envié a través de la API REST se guardó como vacío
El plugin solo acepta colores hexadecimales como #3b82f6 o #fff. Los nombres de colores como red y valores como rgb(0,0,0) se guardan como vacíos.
Mi código en wp_head o wp_footer no se ejecuta en la página de inicio de sesión
La página de inicio de sesión no llama a esos hooks. Usa clwc_login_head para la etiqueta <head>, y clwc_login_footer o clwc_login_enqueue_scripts para el final de la página.

Preguntas frecuentes

¿Estos hooks funcionan en el formulario de inicio de sesión estándar de WooCommerce?
No. Solo se activan en la página de inicio de sesión propia del plugin. El formulario de inicio de sesión estándar de WooCommerce sigue utilizando los hooks de WooCommerce, como woocommerce_login_redirect.
¿Un gerente de tienda puede usar el endpoint de la API REST?
Sí. El endpoint verifica la capacidad manage_woocommerce, y los gerentes de tienda la tienen por defecto.
¿Los hooks necesitan una licencia activada?
No. Los hooks y el endpoint de la API REST no verifican tu licencia. La clave de licencia se utiliza para las actualizaciones del plugin.
¿Dónde agrego el código?
Agrégalo a un pequeño plugin personalizado o al functions.php de tu tema hijo. No lo agregues a los archivos propios del plugin, ya que las actualizaciones del plugin los sobrescribirán.

¿Necesita ayuda?

Custom Login for WooCommerce es un plugin premium, por lo que si necesitas ayuda con una personalización específica, abre un ticket de soporte y nuestro equipo podrá indicarte el hook adecuado para tu caso de uso.

¿Fue útil este artículo?

Artículos relacionados

Recursos y ayuda