Cambiar URL de registro / contraseña perdida "enlaces de acción", títulos y modificar páginas de error. Tema Mi inicio de sesión en la red de Wordpress multisitio

He configurado un enorme multisitio de red para mi cliente que recibe miles de nuevos usuarios por mes y ya cuenta con 5 sitios de red clonados y contando. Tiene una página de inicio estática con el complemento Theme-my-login ejecutándose en un Divi child personalizado tema.

En la página de inicio de sesión personalizada está el inicio de sesión en sí mismo que funciona bien, y debajo de esos dos "enlaces de acción" para "Registrarse" y "Contraseña perdida". Tengo dos páginas personalizadas externas para vincular para ambos enlaces.

Así que edito el archivo functions.php del tema secundario que ya tiene algunos filtros de trabajo que manejan autenticación externa, video (popcorn.js), derechos de autor dinámicos y ocultan el logotipo de Wordpress de la barra de administración.

Quería cambiar los "enlaces de acción" predeterminados de Registro / Contraseña perdida a diferentes URL, cambiar sus títulos de enlace y Modificar las páginas de Error para que la "¿Contraseña perdida?" El enlace conduciría a la misma URL que el "enlace de acción" Contraseña perdida.

A continuación se muestra el archivo Functions.php antes de los cambios requeridos anteriormente:

<?php

/*
PHP script content in functions.php of Child Theme in Wordpress Network 
Multisite.

Functions to add new externally authenticated users as wordpress users 
at subscriber level via email field using HTTP POST. 

Usernames expected in the format: [email protected] or [email protected] 
(also all variations of .com.au, .co.nz, etc.) 

New Wordpress Network MultiSite Subfolders are assigned to their own groups of users. 

On login their WordPress profile is automatically created in the MultiSite 
Subfolder for that user; based on the DOMAIN portion of username/email.
Accordingly, Wordpress Network Subfolder names match the DOMAIN exactly. 

eg: "http://wpsite.com/DOMAIN/Home" is the landing page for the user: 
    "[email protected]" or "[email protected]" and so on.

The Logic flow is below annotated and step by step along with the script:

1.Do the external check: The external login must be successful and the return 
  value must be validated with a "200" response from the external auth' server. 

If response is anything else give an error.

2.Do another check to see if they exist in the WP DB, if not; create them
  first (EVERY user in WordPress has a unique ID, so using this ID to identify a user in this script.) 

If the ID is found, our user is automatically logged in 
and lands on their home page.

If the user does NOT exist, the user should be created automatically on the
relevant subfolder site (see notes ablove)
*/

// PHP code starts here:

// The two lines of filters below are executed just before the invocation of the 
// WordPress authentication process.
add_filter( 'authenticate', 'external_auth', 10, 3 );
add_filter( 'login_redirect', 'ds_login_redirect', 10, 3 );

function external_auth( $user, $username, $password ){

    // Make sure a username and password are present for us to work with
    if($username == '' || $password == '') return;    

    // Try to log into the external service or database with username and password
    $args = array(
        'method' => 'POST',
        'timeout' => 45,
        'redirection' => 5,
        'httpversion' => '1.0',
        'blocking' => true,
        'headers' => array(),
        'body' => array( 'username' => $username, 'password' => $password ),
        'cookies' => array()
        );

    $ext_auth = wp_remote_post("http://IP.OF.EXTERNAL.AUTH:SERVER/api-token-auth/",$args);

    // If external authentication was successful
    if($ext_auth['response']['code'] == 200) {

        $userobj = new WP_User();
        $user = $userobj->get_data_by( 'login', $username ); 
        // Does not return a WP_User object :(
        $user = new WP_User($user->ID); 
        // Attempt to load up the user with that ID

        if( $user->ID == 0 ) {
                // The user does not currently exist in the WordPress user table.

                // If you don't want to add new users to WordPress when they don't already 
                // exist; uncomment the following line and remove the create WP user code
                //$user = new WP_Error( 'denied', __("ERROR: Not a valid user for this system") );

                // Setup minimum required user information and create WP user
                $new_user_id =  wpmu_create_user($username, $password, $username); 
                                // A new user has been created

                                // Match DOMAIN in username/email to WordPress Subfolder and add permission to relevent blog 
                $domain_end = explode('@', $username);
                //var_dump($domain_end);
                $match = explode('.', $domain_end[1]);
                //var_dump($match);


                $domain = 'YOUR_DOMAIN.com';
                foreach ($match as $blog_key){
                    $path = '/'.$blog_key.'/';
                    $blog_id = get_blog_id_from_url ( $domain, $path );
                    if ($blog_id != 0) break;
                }       

                //Specify their role 
                $role = 'subscriber';

                // Give the user access to their blog.
                add_user_to_blog($blog_id, $new_user_id, $role);

                // Load the new user info
                $user = new WP_User ($new_user_id);
        } 

    }else if($ext_auth['response']['code'] == 400){
        $user = new WP_Error( 'denied', __("ERROR: User/pass bad") );
    }

    // Comment below line to fall back to WordPress authentication
    // (in case external service offline for maintenance)
    remove_action('authenticate', 'wp_authenticate_username_password', 20);

    return $user;   
}

function ds_login_redirect( $redirect_to, $request_redirect_to, $user )
{
    if ($user->ID != 0) {
        $user_info = get_userdata($user->ID);
        if ($user_info->primary_blog) {
            $primary_url = get_blogaddress_by_id($user_info->primary_blog) . 'index/';
            if ($primary_url) {
                //echo $primary_url; die();
                wp_redirect($primary_url);
                die();
            }
        }
    }

    return $redirect_to;
}

/* Include popcorn.js --------------------- */

function theme_name_scripts() {
    wp_enqueue_script( 'popcorn', get_template_directory_uri() . '/js/popcorn.js', array(), '1.0.0', true );
}

add_action( 'wp_enqueue_scripts', 'theme_name_scripts' );

/* Dynamic Copyright---------------------WPN-10-03-2016--*/

function dynamic_copyright() {
global $wpdb;
$copyright_dates = $wpdb->get_results("
SELECT
YEAR(min(post_date_gmt)) AS firstdate,
YEAR(max(post_date_gmt)) AS lastdate
FROM
$wpdb->posts
WHERE
post_status = 'publish'
");
$output = '';
if($copyright_dates) {
$copyright = $copyright_dates[0]->firstdate;
if($copyright_dates[0]->firstdate != $copyright_dates[0]->lastdate) {
$copyright .= '-' . $copyright_dates[0]->lastdate;
}
$output = $copyright;
}
return $output;
}

/* Remove WP Logo -------------------------- */


function annointed_admin_bar_remove() {
        global $wp_admin_bar;

        /* Remove their stuff */
        $wp_admin_bar->remove_menu('wp-logo');
}

add_action('wp_before_admin_bar_render', 'annointed_admin_bar_remove', 0);

if ( ! function_exists( 'get_custom_header' ) ) {
    // compatibility with versions of WordPress prior to 3.4.
    add_custom_background();
} else {
    add_theme_support( 'custom-background', apply_filters( 'et_custom_background_args', array() ) );
}

?>

Respuestas a la pregunta(1)

Su respuesta a la pregunta