Frontend deaktivieren, um es nur als CMS zu verwenden?

18

Ich verwende die WordPress-Datenbank und das Back-End, um die Nachrichten für die Website meiner Band zu verwalten, und alles funktioniert hervorragend, aber ich möchte das Front-End von WordPress selbst deaktivieren.

Ich habe die WordPress-Installation in installiert /wordpress/und offensichtlich ist der Admin-Bereich unter /wordpress/wp-admin/.

Was wäre der beste Weg, um jemanden davon abzuhalten, auf die WordPress-Site selbst zuzugreifen, ohne den Admin-Bereich zu beeinträchtigen?

Wenn überhaupt, könnte ich einfach auf die richtige Homepage der Website umleiten ( domain.com/).

Nick Bedford
quelle

Antworten:

19

Um sicherzustellen, dass nur das Front-End zu umleitet domain.com, erstellen Sie ein Design, das die PHP-Funktion header () verwendet.

  • Erstellen Sie einen Ordner mit dem Namen "Weiterleiten" oder so.
  • Fügen Sie dem Ordner zwei Dateien hinzu: style.cssund index.php (erforderlich für ein gültiges WP-Design)
  • In style.css, Add etwas wie folgt aus :

    / * Themenname
    : Weiterleiten
    Beschreibung: Leitet das Front-End an domain.com weiter
    * /

  • Dazu kommt index.phpnoch:

    header ("Ort: http://domain.com ");

  • Laden Sie den Ordner in das Themes-Verzeichnis hoch und aktivieren Sie ihn dann in der Admin-Benutzeroberfläche.
Corey McKrill
quelle
Es ist komisch, weil das Licht in meinem Kopf erloschen ist. Warum nicht einfach ein Thema erstellen, das umleitet? Vielen Dank.
Nick Bedford
1
Für manche mag es offensichtlich sein, aber das hat nur bei mir funktioniert, als die erste Zeile von index.php<?php
finsbury
8

Verwenden Sie ein Thema mit "leeren Daten". Legen Sie zwei Dateien in das Verzeichnis und aktivieren Sie "theme".

style.css

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

und index.php

<?php
exit;
Marcin
quelle
Ich mag diese Lösung, auf diese Weise können Sie leicht zu einem voll funktionsfähigen Thema zurückkehren. Außerdem können Sie etwas hinzufügen, <?php wp_redirect(site_url('wp-admin'));die();anstatt zu beenden, um automatisch zu einer bestimmten Ressource umzuleiten.
MiCc83
3

Fügen Sie dies in Ihre .htaccess-Datei ein und listen Sie die Pfade auf, die Sie verfügbar halten möchten:

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

Fügen Sie dies der .htaccess-Datei in Ihrem Stammverzeichnis hinzu

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

EDIT: Dies ist wirklich nur eine schnelle Lösung, es könnte bessere Lösungen geben. Eine andere Möglichkeit wäre, der Datei functions.php eine Funktion hinzuzufügen, die dann in wp_head () aufgerufen wird, um sie auf diese Weise umzuleiten. Mit dieser Methode können Sie es sich auch erlauben, es mit einer einfachen IP-Überprüfung anzuzeigen.

supajb
quelle
Dies hat einen Nebeneffekt, der /wordpress/wp-adminjetzt umgeleitet wird an//wp-admin
Nick Bedford
1

Obwohl dies eine ziemlich alte Frage mit einer bereits akzeptierten Antwort ist, könnte dies für jemanden nützlich sein, zumal keine dieser Lösungen für mich funktioniert hat.

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

Der Code selbst ist ziemlich erklärend:

  • Führen Sie die Überprüfung des 'init'-Hooks durch
  • überprüfe, ob die Seite, die wir laden, Front-End ist (nicht wp-admin)
  • Weiterleitung zum Backend (wp-admin)

Gib den Code einfach in ein beliebiges Plugin oder in die function.php des Themas ein und es sollte sofort funktionieren.

BEARBEITEN:

Wenn dies bei Ihnen nicht funktioniert (ich hatte auch mit diesem Code kleinere Probleme), können Sie ein neues Thema (oder ein untergeordnetes Thema) erstellen und nur diesen Inhalt in die header.phpDatei einfügen :

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

IMO, ein Plugin würde weniger Arbeit erfordern und ist für den speziellen Fall besser geeignet.

<?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
quelle