¿Deshabilitar el front-end para usar WordPress solo como CMS?

23 may 2011, 08:39:49
Vistas: 28.2K
Votos: 31

Estoy usando la base de datos y el back-end de WordPress para administrar las noticias del sitio web de mi banda y todo funciona muy bien, sin embargo, me gustaría deshabilitar el front-end de WordPress.

Tengo WordPress instalado en /wordpress/ y obviamente la sección de administración está en /wordpress/wp-admin/.

¿Cuál sería la mejor manera de restringir el acceso al sitio de WordPress que está sin configurar sin afectar la sección de administración?

En todo caso, podría simplemente redirigir a la página de inicio principal del sitio web (domain.com/).

0
Todas las respuestas a la pregunta 8
4
31

Para asegurarte de que solo el frontend redirija a domain.com, crea un tema que utilice la función PHP header().

  • Crea una carpeta llamada redirect o algo similar.

  • Añade dos archivos a la carpeta: style.css y index.php (necesarios para un tema válido de WordPress).

  • En style.css, añade algo como esto:

    /*  
       Theme Name: Redirect  
       Description: Redirige el frontend a domain.com  
    */
    
  • En index.php añade esto:

    <?php
         header( "Location: http://domain.com" );
    ?>  
    
  • Sube la carpeta al directorio de temas y luego actívala desde la interfaz de administración.

23 may 2011 10:16:04
Comentarios

Es gracioso porque de repente se me encendió la bombilla. ¿Por qué no hacer simplemente un tema que redireccione! Gracias.

Nick Bedford Nick Bedford
23 may 2011 12:18:48

puede ser obvio para algunos, pero esto solo funcionó para mí cuando la primera línea de index.php era <?php

finsbury finsbury
14 mar 2019 13:41:43

Esto funciona para instalaciones individuales, pero cuando configuras una red multisitio, no funciona.

Shahriar Shahriar
17 ago 2021 22:02:32

Esto funciona para una red multisitio: https://wordpress.stackexchange.com/a/52994/112498

Shahriar Shahriar
17 ago 2021 22:39:41
1
12

Usa un tema con "datos vacíos". Coloca dos archivos en el directorio, luego activa el "tema".

style.css

/*
Theme Name: apagar frontend
Theme URI: 
Description: 
Author: 
Version: 
License: GNU 
License URI: 
Tags:
*/

y index.php

<?php
exit;
23 may 2011 09:58:19
Comentarios

Me gusta esta solución, de esta manera puedes volver fácilmente a un tema completamente funcional. Además, puedes agregar algo como <?php wp_redirect(site_url('wp-admin'));die(); en lugar de exit para redirigir automáticamente a un recurso específico.

Alessandro Benoit Alessandro Benoit
15 ene 2016 10:45:52
1

Aunque esta es una pregunta bastante antigua con una respuesta ya aceptada, alguien podría encontrar esto útil, especialmente ya que ninguna de estas soluciones funcionó para mí.

function redirect_to_backend() {
    if( !is_admin() ) {
        wp_redirect( site_url('wp-admin') );
        exit();
    }
}
add_action( 'init', 'redirect_to_backend' );

El código en sí es bastante explicativo:

  • ejecuta la verificación en el hook 'init'
  • verifica si la página que estamos cargando es el front end (no wp-admin)
  • redirige al back end (wp-admin)

Solo coloca el código en cualquier plugin o en el functions.php del tema y debería funcionar inmediatamente.

EDITADO:

Si esto no funciona para ti (tuve problemas menores incluso con este código), puedes crear un nuevo tema (o un tema hijo) y colocar solo este contenido dentro del archivo header.php:

<?php
header("Location: ".get_admin_url());
exit();
1 abr 2017 02:30:24
Comentarios

Es importante destacar que esto también redirige cuando se intenta acceder a la página de inicio de sesión. Cambiar !is_admin() por !is_admin() && !is_login() solucionó el problema en mi caso.

Niels Abildgaard Niels Abildgaard
12 sept 2023 15:04:01
0

Coloca esto en tu archivo .htaccess y lista las rutas que deseas mantener disponibles:

RewriteCond %{REQUEST_URI} !^/wp-admin
RewriteCond %{REQUEST_URI} !^/wp-includes
RewriteCond %{REQUEST_URI} !^/wp-login
RewriteCond %{REQUEST_URI} !^/wp-content/uploads
RewriteCond %{REQUEST_URI} !^/wp-content/plugins
RewriteCond %{REQUEST_URI} !^/wp-content/cache
RewriteRule (.*) http://tunuevodominio.com/ [R=301,L]
27 sept 2013 12:49:25
0

En mi opinión, un plugin requeriría menos trabajo y es más apropiado para este caso específico.

<?php
/*
Plugin Name: Desactivar Frontend
Description: Deshabilita la interfaz frontal del sitio web, dejando solo el CMS y la API REST
Version: 1.0
*/

add_action('init', 'redirect_to_backend');

function redirect_to_backend() {
    if(
        !is_admin() &&
        !is_wplogin() &&
        !is_rest()
    ) {
    wp_redirect(site_url('wp-admin'));
    exit();
  }
}


if (!function_exists('is_rest')) {
    /**
     * Verifica si la solicitud actual es una petición a la API REST de WordPress.
     * 
     * Caso #1: Después de la inicialización de WP_REST_Request
     * Caso #2: Soporta ajustes de enlaces permanentes "simples"
     * Caso #3: La ruta URL comienza con wp-json/ (tu prefijo REST)
     *          También soporta instalaciones de WP en subdirectorios
     * 
     * @returns boolean
     * @author matzeeable
     */
    function is_rest() {
        $prefix = rest_get_url_prefix( );
        if (defined('REST_REQUEST') && REST_REQUEST // (#1)
            || isset($_GET['rest_route']) // (#2)
                && strpos( trim( $_GET['rest_route'], '\\/' ), $prefix , 0 ) === 0)
            return true;

        // (#3)
        $rest_url = wp_parse_url( site_url( $prefix ) );
        $current_url = wp_parse_url( add_query_arg( array( ) ) );
        return strpos( $current_url['path'], $rest_url['path'], 0 ) === 0;
    }
}

function is_wplogin(){
    $ABSPATH_MY = str_replace(array('\\','/'), DIRECTORY_SEPARATOR, ABSPATH);
    return ((in_array($ABSPATH_MY.'wp-login.php', get_included_files()) || in_array($ABSPATH_MY.'wp-register.php', get_included_files()) ) || (isset($_GLOBALS['pagenow']) && $GLOBALS['pagenow'] === 'wp-login.php') || $_SERVER['PHP_SELF']== '/wp-login.php');
}
24 mar 2019 13:44:34
1

agrega esto al archivo .htaccess en tu directorio raíz

redirect 301 /wordpress http://www.domain.com

EDITADO: Esto es realmente una solución rápida, podría haber mejores alternativas. Otra forma sería agregar una función a tu archivo functions.php que luego se llame en wp_head() para redirigir de esa manera. Usando ese método también podrías permitirte verlo con una simple verificación de IP.

23 may 2011 08:47:45
Comentarios

Esto tiene un efecto secundario donde /wordpress/wp-admin ahora redirige a //wp-admin

Nick Bedford Nick Bedford
23 may 2011 08:53:28
0

Estoy construyendo un sitio con Gatsby y GraphQL, usando WordPress como CMS headless. Realmente no me gustaba la idea de que alguien llegara por casualidad al backend de WordPress y descubriera cómo colarse, así que seguí las instrucciones de @Marcin (ver arriba), es decir, creé:

  • una nueva carpeta de tema (la llamé turn-off-frontend como @Marcin) y dentro coloqué:
  • un style.css (usando el código predeterminado de @Marcin) y un
  • index.php

Dentro de index.php seguí las sugerencias de @dev_masta, pero las modifiqué ligeramente:

  1. No puse el código dentro de header.php - no creé este archivo - sino en index.php.
  2. No quería que la redirección fuera al /wp-login.php de WordPress. Preferí que fuera a mi sitio Gatsby:

Obviamente, este es el entorno de desarrollo de Gatsby y deberá cambiarse a la URL correcta cuando el sitio esté en vivo.

    //index.php
    <?php
    /* Redirigir navegador */
    header("Location: http://localhost:8000");
    exit;

Subí el tema turn-off-frontend a wp-content/themes y lo activé, y funcionó. Cuando fui a mi URL de WordPress, me redirigió directamente a mi sitio Gatsby. Sin embargo, cuando volví al administrador de WordPress > Apariencia para editar el menú, ¡el enlace 'Menús' había desaparecido!

Para solucionarlo, creé un archivo functions.php dentro del tema turn-off-frontend y agregué el siguiente código (del Wordpress Codex):

   //functions.php
   <?php
   function register_my_menu() {
      register_nav_menu('header-menu',__( 'Header Menu' ));
    }
    add_action( 'init', 'register_my_menu' );

Y el menú estuvo disponible nuevamente para agregar páginas y publicaciones.

Espero que alguien encuentre esto útil.

7 mar 2022 15:15:11
0
Si deseas mantener tu API REST funcionando utiliza esto en tu index.php:

<?php
/**
 * Frontend de la aplicación WordPress. Este archivo no hace nada, pero carga
 * wp-blog-header.php que sí lo hace y le indica a WordPress que cargue el tema.
 *
 * @package WordPress
 */

/**
 * Indica a WordPress que cargue el tema de WordPress y lo muestre.
 *
 * @var bool
 */
define( 'WP_USE_THEMES', false );

/** Carga el Entorno y la Plantilla de WordPress */
require __DIR__ . '/wp-blog-header.php';
11 dic 2020 13:42:00