Disabilitare il front-end per utilizzare WordPress solo come CMS?

23 mag 2011, 08:39:49
Visualizzazioni: 28.2K
Voti: 31

Sto utilizzando il database e il back-end di WordPress per amministrare le news del sito web della mia band e tutto funziona perfettamente, tuttavia vorrei disabilitare il front-end di WordPress stesso.

Ho l'installazione di WordPress nella directory /wordpress/ e ovviamente la sezione di amministrazione si trova in /wordpress/wp-admin/.

Qual è il modo migliore per impedire l'accesso al sito WordPress (che non è configurato) senza influenzare la sezione di amministrazione?

Al limite, potrei semplicemente reindirizzare alla homepage principale del sito (domain.com/).

0
Tutte le risposte alla domanda 8
4
31

Per assicurarti che solo il front end venga reindirizzato a domain.com, crea un tema che utilizzi la funzione PHP header().

  • Crea una cartella chiamata redirect o simile.

  • Aggiungi due file alla cartella: style.css e index.php (necessari per un tema WP valido)

  • In style.css, aggiungi qualcosa del genere:

    /*  
       Theme Name: Redirect  
       Description: Reindirizza il front end verso domain.com  
    */
    
  • In index.php aggiungi questo codice:

    <?php
         header( "Location: http://domain.com" );
    ?>  
    
  • Carica la cartella nella directory dei temi e poi attivala dall'interfaccia di amministrazione.

23 mag 2011 10:16:04
Commenti

È divertente perché mi si è appena accesa la lampadina. Perché non creare semplicemente un tema che reindirizza! Grazie.

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

potrebbe essere ovvio per alcuni, ma per me ha funzionato solo quando la prima riga di index.php era <?php

finsbury finsbury
14 mar 2019 13:41:43

Questo funziona per installazioni singole, ma quando configuri una rete multisite, non va.

Shahriar Shahriar
17 ago 2021 22:02:32

Funziona per una rete multisite: https://wordpress.stackexchange.com/a/52994/112498

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

Utilizza un tema con "dati vuoti". Inserisci due file nella directory, poi attiva il "tema".

style.css

/*
Nome Tema: disattiva frontend
URI Tema: 
Descrizione: 
Autore: 
Versione: 
Licenza: GNU 
URI Licenza: 
Tag:
*/

e index.php

<?php
exit;
23 mag 2011 09:58:19
Commenti

Mi piace questa soluzione, in questo modo puoi facilmente tornare a un tema completamente funzionante. Inoltre puoi aggiungere qualcosa come <?php wp_redirect(site_url('wp-admin'));die(); invece di exit per reindirizzare automaticamente a una risorsa specificata.

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

Sebbene questa sia una domanda piuttosto vecchia con una risposta già accettata, qualcuno potrebbe trovarla utile, specialmente poiché nessuna di queste soluzioni ha funzionato per me.

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

Il codice in sé è abbastanza esplicativo:

  • esegui il controllo sull'hook 'init'
  • controlla se la pagina che stiamo caricando è il front end (non wp-admin)
  • reindirizza al back end (wp-admin)

Basta inserire il codice in qualsiasi plugin o nel file function.php del tema e dovrebbe funzionare immediatamente.

MODIFICA:

Se questo non funziona per te (ho avuto piccoli problemi anche con questo codice), puoi creare un nuovo tema (o un tema child) e inserire solo questo contenuto nel file header.php:

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

Da notare che questo reindirizza anche quando si cerca di accedere alla pagina di login. Sostituire !is_admin() con !is_admin() && !is_login() ha risolto il problema nel mio caso.

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

Inserisci questo nel tuo file .htaccess e elenca i percorsi che vuoi mantenere disponibili:

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]
27 set 2013 12:49:25
0

IMO, un plugin richiederebbe meno lavoro e sarebbe più appropriato per questo caso specifico.

<?php
/*
Plugin Name: Disabilita Frontend
Description: Disabilita l'interfaccia frontend del sito, lasciando solo il CMS e l'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 se la richiesta corrente è una richiesta dell'API REST di WP.
     * 
     * Caso #1: Dopo l'inizializzazione di WP_REST_Request
     * Caso #2: Supporta le impostazioni di permalink "semplice"
     * Caso #3: Il percorso URL inizia con wp-json/ (il prefisso REST)
     *          Supporta anche installazioni WP in sottocartelle
     * 
     * @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

aggiungi questo al file .htaccess nella tua directory principale

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

MODIFICA: Questa è solo una soluzione rapida, potrebbero esserci soluzioni migliori. Un altro modo sarebbe aggiungere una funzione al tuo file functions.php, che viene poi richiamata in wp_head() per effettuare il reindirizzamento. Usando quel metodo potresti anche permetterti di visualizzarlo con un semplice controllo dell'IP.

23 mag 2011 08:47:45
Commenti

Questo ha un effetto collaterale per cui /wordpress/wp-admin ora reindirizza a //wp-admin

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

Sto realizzando un sito Gatsby con GraphQL, utilizzando WordPress come CMS headless. Non mi piaceva affatto l'idea che qualcuno potesse atterrare per caso sul backend di WordPress e capire come hackerarlo, quindi ho seguito le istruzioni di @Marcin (vedi sopra), ovvero ho creato:

  • una nuova cartella per il tema (l'ho chiamata turn-off-frontend come suggerito da @Marcin) e al suo interno ho inserito:
  • uno style.css (utilizzando il codice predefinito di @Marcin) e un
  • index.php

Dentro index.php ho seguito i suggerimenti di @dev_masta, ma li ho modificati leggermente:

  1. Non ho inserito il codice in header.php - non ho creato questo file - ma l'ho messo direttamente in index.php.
  2. Non volevo che il reindirizzamento andasse alla pagina /wp-login.php di WordPress. Piuttosto, volevo che andasse al mio sito Gatsby:

Ovviamente, questo è l'ambiente di sviluppo Gatsby e dovrà essere modificato con l'URL corretto quando il sito sarà online.

    //index.php
    <?php
    /* Reindirizza il browser */
    header("Location: http://localhost:8000");
    exit;

Ho caricato il tema turn-off-frontend in wp-content/themes, l'ho attivato e ha funzionato. Quando sono andato all'URL di WordPress, sono stato reindirizzato direttamente al mio sito Gatsby. Tuttavia, quando sono tornato nell'admin di WordPress > Aspetto per modificare il menu, il link 'Menu' era scomparso!

Per risolvere questo problema, ho creato un file functions.php all'interno del tema turn-off-frontend e ho aggiunto il seguente codice (tratto dal WordPress Codex):

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

E il menu è tornato disponibile per aggiungere pagine e post.

Spero che qualcuno trovi utile questa soluzione.

7 mar 2022 15:15:11
0
Se vuoi mantenere la tua API REST funzionante, usa questo nel tuo index.php:

<?php
/**
 * Frontend dell'applicazione WordPress. Questo file non fa nulla, ma carica
 * wp-blog-header.php che invece lo fa e dice a WordPress di caricare il tema.
 *
 * @package WordPress
 */

/**
 * Dice a WordPress di caricare il tema e di mostrarlo.
 *
 * @var bool
 */
define( 'WP_USE_THEMES', false );

/** Carica l'ambiente WordPress e il template */
require __DIR__ . '/wp-blog-header.php';
11 dic 2020 13:42:00