• panda

    (@alejorostata)


    I don’t want to use the default Password Reset of WooCommerce, so I remove it from the endpoint in WooCommerce Settings then use the below hook to replace the URL.

    function wdm_lostpassword_url() {
        return site_url('/password-recovery');
    }
    add_filter( 'lostpassword_url',  'wdm_lostpassword_url', 10, 0 );

    It’s working fine, however, the URL in the email is the problem.
    https://domain.com/my-account/lost-password/?key=PWKdexxnkchEQ3ZAyDsX&id=2
    When clicking that link, 404 error page not found will show up.

    How can I change the URL of it to something;
    https://domain.com/password-recovery/?key=PWKdexxnkchEQ3ZAyDsX&id=2

Viewing 1 replies (of 1 total)
  • Thread Starter panda

    (@alejorostata)

    I managed to change it by overriding the templates located at woocommerce/templates/emails/customer-reset-password.php and woocommerce/templates/emails/plain/customer-reset-password.php;

    For plain email:

    <?php
    /**
     * Customer Reset Password email
     *
     * This template can be overridden by copying it to yourtheme/woocommerce/emails/plain/customer-reset-password.php.
     *
     * HOWEVER, on occasion WooCommerce will need to update template files and you
     * (the theme developer) will need to copy the new files to your theme to
     * maintain compatibility. We try to do this as little as possible, but it does
     * happen. When this occurs the version of the template file will be bumped and
     * the readme will list any important changes.
     *
     * @see https://docs.woocommerce.com/document/template-structure/
     * @package WooCommerce/Templates/Emails/Plain
     * @version 3.7.0
     */
    
    defined( 'ABSPATH' ) || exit;
    
    echo "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n";
    echo esc_html( wp_strip_all_tags( $email_heading ) );
    echo "\n=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n\n";
    
    /* translators: %s: Customer username */
    echo sprintf( esc_html__( 'Hi %s,', 'woocommerce' ), esc_html( $user_login ) ) . "\n\n";
    /* translators: %s: Store name */
    echo sprintf( esc_html__( 'Someone has requested a new password for the following account on %s:', 'woocommerce' ), esc_html( wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ) ) ) . "\n\n";
    /* translators: %s: Customer username */
    echo sprintf( esc_html__( 'Username: %s', 'woocommerce' ), esc_html( $user_login ) ) . "\n\n";
    echo esc_html__( 'If you didn\'t make this request, just ignore this email. If you\'d like to proceed:', 'woocommerce' ) . "\n\n";
    echo esc_url( add_query_arg( array( 'key' => $reset_key, 'id' => $user_id ), home_url().'/your-custom-url/' ) ) . "\n\n"; // phpcs:ignore
    
    echo "\n\n----------------------------------------\n\n";
    
    /**
     * Show user-defined additional content - this is set in each email's settings.
     */
    if ( $additional_content ) {
    	echo esc_html( wp_strip_all_tags( wptexturize( $additional_content ) ) );
    	echo "\n\n----------------------------------------\n\n";
    }
    
    echo wp_kses_post( apply_filters( 'woocommerce_email_footer_text', get_option( 'woocommerce_email_footer_text' ) ) );

    For non-plain email:

    <?php
    /**
     * Customer Reset Password email
     *
     * This template can be overridden by copying it to yourtheme/woocommerce/emails/customer-reset-password.php.
     *
     * HOWEVER, on occasion WooCommerce will need to update template files and you
     * (the theme developer) will need to copy the new files to your theme to
     * maintain compatibility. We try to do this as little as possible, but it does
     * happen. When this occurs the version of the template file will be bumped and
     * the readme will list any important changes.
     *
     * @see https://docs.woocommerce.com/document/template-structure/
     * @package WooCommerce/Templates/Emails
     * @version 4.0.0
     */
    
    if ( ! defined( 'ABSPATH' ) ) {
    	exit; // Exit if accessed directly.
    }
    
    ?>
    
    <?php do_action( 'woocommerce_email_header', $email_heading, $email ); ?>
    
    <?php /* translators: %s: Customer username */ ?>
    <p><?php printf( esc_html__( 'Hi %s,', 'woocommerce' ), esc_html( $user_login ) ); ?></p>
    <?php /* translators: %s: Store name */ ?>
    <p><?php printf( esc_html__( 'Someone has requested a new password for the following account on %s:', 'woocommerce' ), esc_html( wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ) ) ); ?></p>
    <?php /* translators: %s: Customer username */ ?>
    <p><?php printf( esc_html__( 'Username: %s', 'woocommerce' ), esc_html( $user_login ) ); ?></p>
    <p><?php esc_html_e( 'If you didn\'t make this request, just ignore this email. If you\'d like to proceed:', 'woocommerce' ); ?></p>
    <p>
    	<a class="link" href="<?php 
    						  echo esc_url( add_query_arg( array( 'key' => $reset_key, 'id' => $user_id ), home_url()."/your-custom-url/" ) ); ?>"><?php // phpcs:ignore ?>
    		<?php esc_html_e( 'Click here to reset your password', 'woocommerce' ); ?>
    	</a>
    </p>
    
    <?php
    /**
     * Show user-defined additional content - this is set in each email's settings.
     */
    if ( $additional_content ) {
    	echo wp_kses_post( wpautop( wptexturize( $additional_content ) ) );
    }
    
    do_action( 'woocommerce_email_footer', $email );
Viewing 1 replies (of 1 total)
  • The topic ‘Change URL in Password Reset Email’ is closed to new replies.