WordPress: restringir todo o parte del contenido a usuarios registrados sin plugin. Web privada.

Si quieres restringir todo o parte del contenido de tu web sólo a usuarios registrados, puedes usar plugins. Pero somos partidarios de usar los mínimos posibles para :

  • Optimizar recursos. Cuantos más plugins, más lenta va la web, más css y javascript se cargan.
  • Evitar vectores de ataques: los plugins pueden tener vulnerabilidades por las que puedan entrar hackers. No tener muchos minimiza las opciones.
  • Simplificar la web. Evitas conflictos, te permite hacer nuevos desarrollos sin depender de que otros plugins den problemas etc.

Así que, si las cosas son sencillas, preferimos hacerlas por código. Ya sabéis, o poniendo el código en el fichero functions.php de nuestro tema hijo, o en un plugin de código como Code Snippets.

Hoy os enseñamos a hacer de vuestra web una web privada, o restringir ciertas páginas a usuarios registrados.

Cómo restringir todo o parte del contenido a usuarios registrados.

Lo que vamos a hacer es poner un código que compruebe, cuando entres, si estás registrado. Si no, te llevará a la página de registro.

Para toda la web.

Pon este código en tu functions.php o en tu snippet.

/**
* Redirect to registration page
*/
function smythsys_template_redirect()
{
    //if not logged in redirect
    if( ! is_user_logged_in()      
    )
    {
        wp_redirect( home_url( '/wp-login.php' ) );
        exit();
    }
}
add_action( 'template_redirect', 'smythsys_template_redirect' );

Como veis, podéis cambiar el código para redirigir a otra página.

Restringir sólo ciertas páginas.

Podemos cambiar fácilmente el código para que la comprobación la haga sólo en cierta páginas.



/**
* Redirect to registration page
*/
function smythsys_template_redirect()
{
    //if not logged in redirect
    if( ! is_user_logged_in() && is_page('slug')      
    )
    {
        wp_redirect( home_url( '/wp-login.php' ) );
        exit();
    }
}
add_action( 'template_redirect', 'smythsys_template_redirect' );

donde tienes que cambiar slug (en azul) por el slug de tu página.

Si queremos varias páginas podemos:



/**
* Redirect to registration page
*/
function smythsys_template_redirect()
{
    //if not logged in redirect
    if( ! is_user_logged_in() && is_page( array( 'slug1', 'slug2', 'slug3' ) )
      
    )
    {
        wp_redirect( home_url( '/wp-login.php' ) );
        exit();
    }
}
add_action( 'template_redirect', 'smythsys_template_redirect' );


o



/**
* Redirect to registration page
*/
function smythsys_template_redirect()
{
    //if not logged in redirect
    if( ! is_user_logged_in() && is_page('slug1') || && is_page('slug2')
      
    )
    {
        wp_redirect( home_url( '/wp-login.php' ) );
        exit();
    }
}
add_action( 'template_redirect', 'smythsys_template_redirect' );

Ya que || es como un OR (podemos encadenar los que queramos).

Si queremos redirigir al usuario, después de iniciar sesión, a la página que intentó ver.

Aquí os dejamos otra variante donde redirigimos al usuario a la página que intentaba ver cuando le saltó el inicio de sesión, usando auth_redirect.



/**
* Redirect to registration page
*/
function smythsys_template_redirect()
{
    //if not logged in redirect
    if( ! is_user_logged_in()      
    )
    {
       auth_redirect();
    }
}
add_action( 'template_redirect', 'smythsys_template_redirect' );