Wyłączyć frontonu, aby był używany tylko jako CMS?

18

Korzystam z bazy danych i zaplecza WordPress do administrowania wiadomościami na stronie mojego zespołu i wszystko działa świetnie, jednak chciałbym wyłączyć interfejs WordPress.

Mam zainstalowaną instalację WordPress /wordpress/i oczywiście sekcja administracyjna jest pod /wordpress/wp-admin/.

Jaki byłby najlepszy sposób, aby ograniczyć komuś dostęp do raczej * un * konfiguracyjnej strony WordPress bez wpływu na sekcję administratora?

Jeśli już, to mogę po prostu przekierować na właściwą stronę główną witryny ( domain.com/).

Nick Bedford
źródło

Odpowiedzi:

19

Aby upewnić się, że tylko interfejs użytkownika przekierowuje domain.com, utwórz motyw, który używa funkcji header () PHP.

  • Utwórz folder o nazwie przekierowanie lub coś takiego.
  • Dodaj dwa pliki do folderu: style.cssi index.php (niezbędne do prawidłowego motywu WP)
  • W style.cssdodaj coś takiego:

    / *
    Nazwa motywu: Przekieruj
    Opis: Przekierowuje interfejs do domain.com
    * /

  • Na index.phpdodatek w tym:

    nagłówek („Lokalizacja: http://domain.com ”);

  • Prześlij folder do katalogu motywów, a następnie aktywuj go w interfejsie administratora.
Corey McKrill
źródło
To zabawne, bo światło właśnie zgasło w mojej głowie. Dlaczego nie stworzyć motywu, który przekieruje! Dzięki.
Nick Bedford
1
może być oczywiste dla niektórych, ale działało to tylko dla mnie, gdy pierwsza linia index.php była<?php
finsbury
8

Użyj motywu z „pustymi danymi”. Umieść dwa pliki w katalogu, a następnie aktywuj „motyw”.

style.css

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

i index.php

<?php
exit;
Marcin
źródło
Podoba mi się to rozwiązanie, w ten sposób możesz łatwo wrócić do w pełni działającego motywu. Co więcej, możesz dodać coś takiego <?php wp_redirect(site_url('wp-admin'));die();zamiast wyjścia, aby automatycznie przekierowywać do danego zasobu.
MiCc83,
3

Umieść to w swoim .htaccess i wypisz ścieżki, które chcesz zachować:

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
źródło
2

dodaj to do .htaccess w swoim katalogu głównym

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

EDYCJA: To jest naprawdę tylko szybkie rozwiązanie, mogą być lepsze rozwiązania. Innym sposobem byłoby dodanie funkcji do pliku functions.php, która jest następnie wywoływana w wp_head () w celu przekierowania w ten sposób. Korzystając z tej metody, możesz również pozwolić sobie na jej przeglądanie za pomocą prostej kontroli adresu IP.

supajb
źródło
Ma to efekt uboczny, który /wordpress/wp-adminteraz przekierowuje do//wp-admin
Nicka Bedforda
1

Chociaż jest to dość stare pytanie z już zaakceptowaną odpowiedzią, ktoś może uznać to za przydatne, zwłaszcza że żadne z tych rozwiązań nie działało dla mnie.

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

Sam kod jest dość objaśniający:

  • uruchom sprawdzanie na haku inicjującym
  • sprawdź, czy ładowana strona jest frontonem (nie wp-admin)
  • przekieruj do back-endu (wp-admin)

Wystarczy wstawić kod do dowolnej wtyczki lub funkcji theme.php i powinien on działać od razu po wyjęciu z pudełka.

EDYTOWAĆ:

Jeśli to nie działa (miałem drobne problemy nawet z tym kodem), możesz utworzyć nowy motyw (lub motyw podrzędny) i umieścić tylko tę zawartość w header.phppliku:

<?php
header("Location: ".get_admin_url());
exit();
dev_masta
źródło
0

IMO, wtyczka wymagałaby mniej pracy i jest bardziej odpowiednia w konkretnym przypadku.

<?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
źródło