John Davidson

php - Force redirect admin to admin dashboard after login WooCommerce

0 comments
Message:


Am using the snippet below to create separate login and register pages for WooCommerce, however this snippet has overridden my default wp-dmin page so when I want to login via example.com/wp-admin, it redirects to my login page I created example.com/login then after login it redirects to example.com/my-account.


I need help modifying the login shortcode to redirect users with admin role to admin dashboard after login and users with customer role to my-account dashboard.


REGISTER PAGE SHORTCODE


/**
* @snippet WooCommerce User Login Shortcode
*/

add_shortcode( 'wc_reg_form_bbloomer', 'bbloomer_separate_registration_form' );

function bbloomer_separate_registration_form() {
if ( is_admin() ) return;
if ( is_user_logged_in() ) return;
ob_start();

// NOTE: THE FOLLOWING <FORM></FORM> IS COPIED FROM woocommerce\templates\myaccount\form-login.php
// IF WOOCOMMERCE RELEASES AN UPDATE TO THAT TEMPLATE, YOU MUST CHANGE THIS ACCORDINGLY

do_action( 'woocommerce_before_customer_login_form' );

?>
<form method="post" class="woocommerce-form woocommerce-form-register register" <?php do_action( 'woocommerce_register_form_tag' ); ?> >

<?php do_action( 'woocommerce_register_form_start' ); ?>

<?php if ( 'no' === get_option( 'woocommerce_registration_generate_username' ) ) : ?>

<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
<label for="reg_username"><?php esc_html_e( 'Username', 'woocommerce' ); ?> <span class="required">*</span></label>
<input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="username" id="reg_username" autocomplete="username" value="<?php echo ( ! empty( $_POST['username'] ) ) ? esc_attr( wp_unslash( $_POST['username'] ) ) : ''; ?>" /><?php // @codingStandardsIgnoreLine ?>
</p>

<?php endif; ?>

<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
<label for="reg_email"><?php esc_html_e( 'Email address', 'woocommerce' ); ?> <span class="required">*</span></label>
<input type="email" class="woocommerce-Input woocommerce-Input--text input-text" name="email" id="reg_email" autocomplete="email" value="<?php echo ( ! empty( $_POST['email'] ) ) ? esc_attr( wp_unslash( $_POST['email'] ) ) : ''; ?>" /><?php // @codingStandardsIgnoreLine ?>
</p>

<?php if ( 'no' === get_option( 'woocommerce_registration_generate_password' ) ) : ?>

<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
<label for="reg_password"><?php esc_html_e( 'Password', 'woocommerce' ); ?> <span class="required">*</span></label>
<input type="password" class="woocommerce-Input woocommerce-Input--text input-text" name="password" id="reg_password" autocomplete="new-password" />
</p>

<?php else : ?>

<p><?php esc_html_e( 'A password will be sent to your email address.', 'woocommerce' ); ?></p>

<?php endif; ?>

<?php do_action( 'woocommerce_register_form' ); ?>

<p class="woocommerce-FormRow form-row">
<?php wp_nonce_field( 'woocommerce-register', 'woocommerce-register-nonce' ); ?>
<button type="submit" class="woocommerce-Button woocommerce-button button woocommerce-form-register__submit" name="register" value="<?php esc_attr_e( 'Register', 'woocommerce' ); ?>"><?php esc_html_e( 'Register', 'woocommerce' ); ?></button>
</p>

<?php do_action( 'woocommerce_register_form_end' ); ?>

</form>

<?php

return ob_get_clean();
}

LOGIN PAGE SHORTCODE


/**
* @snippet WooCommerce User Login Shortcode
*/

add_shortcode( 'wc_login_form', 'bbloomer_separate' );

function bbloomer_separate() {
if ( is_admin() ) return;
ob_start();
woocommerce_login_form( array( 'redirect' => 'https://example.com/my-account/' ) );
return ob_get_clean();
}


My Answer:
To redirect users with admin role to the admin dashboard after login, you can modify the login shortcode as follows:

php
add_shortcode( 'wc_login_form', 'bbloomer_separate' );

function bbloomer_separate() {
if ( is_admin() ) {
if ( current_user_can( 'administrator' ) ) {
wp_redirect( admin_url() );
exit;
}
}
ob_start();
woocommerce_login_form( array( 'redirect' => 'https://example.com/my-account/' ) );
return ob_get_clean();
}


This code snippet checks if the user is an administrator before redirecting them to the admin dashboard using `admin_url()`. If the user is not an administrator, they will be redirected to the 'my-account' page as before.

Rate this post

3 of 5 based on 7382 votes

Comments




© 2024 Hayatsk.info - Personal Blogs Platform. All Rights Reserved.
Create blog  |  Privacy Policy  |  Terms & Conditions  |  Contact Us