¿Deshabilitar la interfaz para usar solo como CMS?

18

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

Tengo instalada la instalación de WordPress /wordpress/y obviamente la sección de administración está debajo /wordpress/wp-admin/.

¿Cuál sería la mejor manera de restringir que alguien acceda al sitio de WordPress de configuración en lugar de * un * sin afectar la sección de administración?

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

Nick Bedford
fuente

Respuestas:

19

Para asegurarse de que solo el front-end redirecciona domain.com, cree un tema que use la función de encabezado PHP ().

  • Crea una carpeta llamada redirección o algo así.
  • Agregue dos archivos a la carpeta: style.cssy index.php (necesario para un tema WP válido)
  • En style.css, agregue algo como esto:

    / *
    Nombre del tema: Redirigir
    Descripción: Redirige el front-end a domain.com
    * /

  • En index.phpagregar esto:

    encabezado ("Ubicación: http://dominio.com ");

  • Cargue la carpeta en el directorio de temas y luego actívela en la interfaz de usuario del administrador.
Corey McKrill
fuente
Es gracioso porque esa luz se apagó en mi cabeza. ¡Por qué no simplemente hacer un tema que redirija! Gracias.
Nick Bedford
1
puede ser obvio para algunos, pero esto solo funcionó para mí cuando la primera línea de index.php fue<?php
finsbury
8

Use un tema con "datos vacíos". Ponga dos archivos en el directorio, luego active "tema".

style.css

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

e index.php

<?php
exit;
Marcin
fuente
Me gusta esta solución, de esta manera puedes volver fácilmente a un tema de trabajo completo. Además, puede agregar algo como en <?php wp_redirect(site_url('wp-admin'));die();lugar de salir para redirigir automáticamente a un recurso determinado.
MiCc83
3

Ponga esto en su .htaccess y enumere las rutas que desea 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://yournewdomain.com/ [R=301,L]
Ben Rogmans
fuente
2

agregue esto al .htaccess en su directorio raíz

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

EDITAR: Esto es realmente solo una solución rápida, puede haber mejores soluciones. Otra forma sería agregar una función a su archivo functions.php, que luego se llama en wp_head () para redirigir de esa manera. Usando ese método, también podría permitirse verlo con una simple verificación de IP.

supajb
fuente
Esto tiene un efecto secundario que /wordpress/wp-adminahora redirige a//wp-admin
Nick Bedford
1

Aunque esta es una pregunta bastante antigua con una respuesta ya aceptada, alguien podría encontrarla útil, especialmente porque 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:

  • ejecutar la verificación en el gancho 'init'
  • compruebe si la página que estamos cargando es front-end (no wp-admin)
  • redirigir al back end (wp-admin)

Simplemente ponga el código en cualquier complemento o en la función del tema.php y debería funcionar de inmediato.

EDITAR:

Si esto no funciona para usted (tuve problemas menores incluso con este código), puede crear un nuevo tema (o un tema secundario) y poner solo este contenido dentro del header.phparchivo:

<?php
header("Location: ".get_admin_url());
exit();
dev_masta
fuente
0

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

<?php
/*
Plugin Name: Disalbe Frontend
Description:  Disable the frontend interface of the website, leave only CMS and REST API
Author: Nikola Mihyalov
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')) {
    /**
     * Checks if the current request is a WP REST API request.
     * 
     * Case #1: After WP_REST_Request initialisation
     * Case #2: Support "plain" permalink settings
     * Case #3: URL Path begins with wp-json/ (your REST prefix)
     *          Also supports WP installations in subfolders
     * 
     * @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');
}
nikksan
fuente