Desativar o front end para usar apenas como CMS?

18

Estou usando o banco de dados WordPress e o back-end para administrar as notícias do site da minha banda e tudo está funcionando muito bem, no entanto, gostaria de desativar o front-end do WordPress.

Eu tenho a instalação do WordPress instalada /wordpress/e, obviamente, a seção de administração está abaixo /wordpress/wp-admin/.

Qual seria a melhor maneira de impedir que alguém acesse o próprio site WordPress * un * setup sem afetar a seção de administração?

Se alguma coisa, eu poderia simplesmente redirecionar para a página inicial adequada do site ( domain.com/).

Nick Bedford
fonte

Respostas:

19

Para garantir que apenas o front end seja redirecionado domain.com, crie um tema que use a função header () do PHP.

  • Crie uma pasta chamada redirecionar ou algo assim.
  • Adicione dois arquivos à pasta: style.csse index.php (necessário para um tema WP válido)
  • Em style.css, adicione algo como isto:

    / *
    Nome do tema: Redirecionar
    Descrição: Redireciona o front end para domain.com
    * /

  • Em index.phpacrescentar o seguinte:

    cabeçalho ("Localização: http://domain.com ");

  • Carregue a pasta no diretório de temas e ative-a na interface do usuário do administrador.
Corey McKrill
fonte
É engraçado porque essa luz simplesmente se apagou na minha cabeça. Por que não fazer apenas um tema que redireciona! Obrigado.
Nick Bedford
11
pode ser óbvio para alguns, mas isso só funcionou para mim quando a primeira linha do index.php foi<?php
finsbury
8

Use um tema com "dados vazios". Coloque dois arquivos no diretório e ative o "tema".

style.css

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

e index.php

<?php
exit;
Marcin
fonte
Eu gosto dessa solução, dessa maneira você pode facilmente voltar para um tema de trabalho completo. Além disso, você pode adicionar algo como, em <?php wp_redirect(site_url('wp-admin'));die();vez de sair, para redirecionar automaticamente para um determinado recurso.
MiCc83
3

Coloque isso no seu .htaccess e liste os caminhos que você deseja manter disponíveis:

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
fonte
2

adicione isso ao .htaccess no diretório raiz

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

Edição: Esta é realmente apenas uma solução rápida, pode haver melhores soluções. Outra maneira seria adicionar uma função ao seu arquivo functions.php, que é chamado em wp_head () para redirecionar dessa maneira. Usando esse método, você também pode vê-lo com uma simples verificação de IP.

supajb
fonte
Isso tem um efeito colateral que /wordpress/wp-adminagora redireciona para//wp-admin
Nick Bedford
1

Embora essa seja uma pergunta bastante antiga, com uma resposta já aceita, alguém pode achar isso útil, especialmente porque nenhuma dessas soluções funcionou para mim.

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

O código em si é bastante explicativo:

  • execute a verificação no gancho 'init'
  • verifique se a página que estamos carregando é front end (não wp-admin)
  • redirecionar para back-end (wp-admin)

Basta colocar o código em qualquer plug-in ou no function.php do tema e ele deve funcionar imediatamente.

EDITAR:

Se isso não funcionar para você (eu tive problemas menores, mesmo com esse código), você pode criar um novo tema (ou um tema filho) e colocar apenas esse conteúdo dentro do header.phparquivo:

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

Na IMO, um plug-in exigiria menos trabalho e é mais apropriado para o 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
fonte