Dezactivare front-end WordPress pentru utilizare doar ca CMS
Folosesc baza de date WordPress și back-end-ul pentru a administra știrile pentru site-ul web al trupei mele și totul funcționează excelent, însă aș dori să dezactivez front-end-ul WordPress-ului.
Am instalarea WordPress în /wordpress/
și evident secțiunea de administrare este sub /wordpress/wp-admin/
.
Care ar fi cea mai bună metodă de a restricționa accesul cuiva la site-ul WordPress care nu este configurat, fără a afecta secțiunea de administrare?
Dacă e necesar, aș putea pur și simplu să redirecționez către pagina principală corectă a site-ului (domain.com/
).
Pentru a vă asigura că doar front-end-ul redirecționează către domain.com
, creați o temă care utilizează funcția PHP header().
Creați un director numit redirect sau altceva similar.
Adăugați două fișiere în director:
style.css
șiindex.php
(necesare pentru o temă WP validă)În
style.css
, adăugați ceva de genul:/* Nume temă: Redirect Descriere: Redirecționează front-end-ul către domain.com */
În
index.php
adăugați acest cod:<?php header( "Location: http://domain.com" ); ?>
Încărcați directorul în directorul de teme și apoi activați-l în interfața de administrare.

E amuzant pentru că tocmai mi-a dat becul în cap. De ce să nu faci o temă care doar redirecționează! Mersi.

poate fi evident pentru unii, dar a funcționat pentru mine doar când prima linie din index.php era <?php

Această metodă funcționează pentru instalări simple, dar când configurezi o rețea multisite, nu merge.

Aceasta funcționează pentru o rețea multisite: https://wordpress.stackexchange.com/a/52994/112498

Deși aceasta este o întrebare destul de veche cu un răspuns deja acceptat, cineva ar putea găsi acest lucru util, mai ales deoarece niciuna dintre aceste soluții nu a funcționat pentru mine.
function redirect_to_backend() {
if( !is_admin() ) {
wp_redirect( site_url('wp-admin') );
exit();
}
}
add_action( 'init', 'redirect_to_backend' );
Codul în sine este destul de explicativ:
- rulează verificarea pe hook-ul 'init'
- verifică dacă pagina pe care o încărcăm este front end (nu wp-admin)
- redirecționează către back end (wp-admin)
Doar puneți codul în orice plugin sau în fișierul functions.php al temei și ar trebui să funcționeze imediat.
EDIT:
Dacă acest lucru nu funcționează pentru dvs. (am avut probleme minore chiar și cu acest cod), puteți crea o temă nouă (sau o temă copil) și puneți doar acest conținut în fișierul header.php
:
<?php
header("Location: ".get_admin_url());
exit();

Introduceți acest cod în fișierul .htaccess și enumerați căile pe care doriți să le păstrați accesibile:
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://domeniultau.ro/ [R=301,L]

IMO, un plugin ar necesita mai puțină muncă și este mai potrivit pentru cazul specific.
<?php
/*
Plugin Name: Dezactivează Frontend
Description: Dezactivează interfața frontală a site-ului, lasă doar CMS-ul și REST API
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')) {
/**
* Verifică dacă cererea curentă este o cerere către WP REST API.
*
* Cazul #1: După inițializarea WP_REST_Request
* Cazul #2: Suportă setările de permalink "simplu"
* Cazul #3: Calea URL începe cu wp-json/ (prefixul tău REST)
* De asemenea, suportă instalări WP în subfoldere
*
* @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');
}

adaugă acest lucru în fișierul .htaccess din directorul rădăcină
redirect 301 /wordpress http://www.domain.com
EDITARE: Aceasta este doar o soluție rapidă, pot exista soluții mai bune. O altă metodă ar fi să adaugi o funcție în fișierul functions.php, care este apoi apelată în wp_head() pentru a face redirecționarea în acest fel. Folosind această metodă, ai putea de asemenea să-ți permiți să vizualizezi conținutul printr-o simplă verificare a adresei IP.

Construiesc un site Gatsby cu GraphQL, folosind WordPress ca un CMS headless. Nu mi-a plăcut ideea ca cineva să ajungă din întâmplare pe interfața de administrare WordPress și să încerce să găsească modalități de a intra, așa că am urmat instrucțiunile lui @Marcin (vezi mai sus), adică am creat:
- un folder pentru o nouă temă (l-am numit turn-off-frontend conform sugestiei lui @Marcin) și în interiorul acestuia am plasat:
- un fișier style.css (folosind codul implicit al lui @Marcin) și un
- fișier index.php
În interiorul index.php am urmat sugestiile lui @dev_masta, dar le-am modificat ușor:
- Nu am pus codul în header.php - nu am creat acest fișier - ci l-am pus direct în index.php.
- Nu am vrut ca redirecționarea să meargă către /wp-login.php din WordPress. În schimb, am dorit să meargă către site-ul meu Gatsby:
Evident, acesta este mediul de dezvoltare Gatsby și va trebui să fie schimbat cu URL-ul corect atunci când site-ul va fi lansat.
//index.php
<?php
/* Redirecționează browserul */
header("Location: http://localhost:8000");
exit;
Am încărcat tema turn-off-frontend în wp-content/themes, am activat-o și a funcționat. Când am accesat URL-ul WordPress, am fost redirecționat direct către site-ul meu Gatsby. Totuși, când m-am întors în administrarea WordPress > Aspect pentru a edita meniul, link-ul 'Meniuri' dispăruse!
Pentru a rezolva această problemă, am creat un fișier functions.php în interiorul temei turn-off-frontend și am adăugat următorul cod (din Wordpress Codex):
//functions.php
<?php
function register_my_menu() {
register_nav_menu('header-menu',__( 'Header Menu' ));
}
add_action( 'init', 'register_my_menu' );
Și meniul a devenit din nou disponibil pentru adăugarea de pagini și articole.
Sper că acest lucru va fi util cuiva.

Dacă dorești să păstrezi funcțional API-ul REST, folosește acest cod în index.php:
<?php
/**
* Frontend pentru aplicația WordPress. Acest fișier nu face nimic, dar încarcă
* wp-blog-header.php care face acest lucru și îi spune WordPress să încarce tema.
*
* @package WordPress
*/
/**
* Specifică WordPress să încarce tema și să o afișeze.
*
* @var bool
*/
define( 'WP_USE_THEMES', false );
/** Încarcă mediul WordPress și șablonul */
require __DIR__ . '/wp-blog-header.php';
