Отключение фронтенда WordPress для использования только как CMS

23 мая 2011 г., 08:39:49
Просмотры: 28.2K
Голосов: 31

Я использую базу данных WordPress и административную панель для управления новостями на сайте моей группы, и всё работает отлично, однако я хотел бы отключить фронтенд WordPress.

WordPress установлен в директории /wordpress/, а административная часть, соответственно, находится в /wordpress/wp-admin/.

Какой самый лучший способ ограничить доступ к неоформленному сайту WordPress, не затрагивая при этом административную часть?

В крайнем случае, я мог бы просто настроить перенаправление на основную страницу сайта (domain.com/).

0
Все ответы на вопрос 8
4
31

Чтобы обеспечить перенаправление только фронтенда на domain.com, создайте тему, которая использует PHP-функцию header().

  • Создайте папку с названием redirect или подобным.

  • Добавьте в папку два файла: style.css и index.php (необходимо для валидной темы WordPress).

  • В style.css добавьте следующее:

    /*  
       Theme Name: Redirect  
       Description: Перенаправляет фронтенд на domain.com  
    */
    
  • В index.php добавьте этот код:

    <?php
         header( "Location: http://domain.com" );
    ?>  
    
  • Загрузите папку в директорию тем и активируйте её через админ-панель.

23 мая 2011 г. 10:16:04
Комментарии

Забавно, потому что у меня только что осенило. Почему бы просто не сделать тему с редиректом! Спасибо.

Nick Bedford Nick Bedford
23 мая 2011 г. 12:18:48

может быть очевидно для некоторых, но у меня сработало только когда первой строкой в index.php было <?php

finsbury finsbury
14 мар. 2019 г. 13:41:43

Это работает для одиночных установок, но когда вы настраиваете мультисайтовую сеть, это не срабатывает.

Shahriar Shahriar
17 авг. 2021 г. 22:02:32

Это работает для мультисайтовой сети: https://wordpress.stackexchange.com/a/52994/112498

Shahriar Shahriar
17 авг. 2021 г. 22:39:41
1
12

Используйте тему с "пустыми данными". Поместите два файла в директорию, затем активируйте "тему".

style.css

/*
Название темы: отключить фронтенд
URI темы: 
Описание: 
Автор: 
Версия: 
Лицензия: GNU 
URI лицензии: 
Теги:
*/

и index.php

<?php
exit;
23 мая 2011 г. 09:58:19
Комментарии

Мне нравится это решение, так вы сможете легко вернуться к полностью рабочей теме. Более того, вы можете добавить что-то вроде <?php wp_redirect(site_url('wp-admin'));die(); вместо exit, чтобы автоматически перенаправлять на указанный ресурс.

Alessandro Benoit Alessandro Benoit
15 янв. 2016 г. 10:45:52
1

Хотя это довольно старый вопрос с уже принятым ответом, кому-то может пригодиться эта информация, особенно учитывая, что ни одно из предложенных решений у меня не сработало.

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

Сам код достаточно понятный:

  • проверка выполняется на хуке 'init'
  • проверяется, загружается ли фронтенд (не wp-admin)
  • перенаправление в бэкенд (wp-admin)

Просто поместите этот код в любой плагин или файл function.php вашей темы, и он должен заработать сразу.

РЕДАКТИРОВАНИЕ:

Если это не работает у вас (у меня были небольшие проблемы даже с этим кодом), вы можете создать новую тему (или дочернюю тему) и поместить только это содержимое в файл header.php:

<?php
header("Location: ".get_admin_url());
exit();
1 апр. 2017 г. 02:30:24
Комментарии

Важно отметить, что это также перенаправляет при попытке доступа к странице входа. Замена !is_admin() на !is_admin() && !is_login() решила проблему в моем случае.

Niels Abildgaard Niels Abildgaard
12 сент. 2023 г. 15:04:01
0

Поместите это в ваш файл .htaccess и укажите пути, которые должны оставаться доступными:

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 сент. 2013 г. 12:49:25
0

IMO, плагин потребует меньше работы и больше подходит для данного конкретного случая.

<?php
/*
Plugin Name: Отключение фронтенда
Description: Отключает интерфейс фронтенда сайта, оставляя только CMS и 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')) {
    /**
     * Проверяет, является ли текущий запрос запросом к WP REST API.
     * 
     * Случай #1: После инициализации WP_REST_Request
     * Случай #2: Поддержка "простых" настроек постоянных ссылок
     * Случай #3: URL путь начинается с wp-json/ (ваш префикс REST)
     *          Также поддерживает установки WP в подпапках
     * 
     * @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 мар. 2019 г. 13:44:34
1

Добавьте это в файл .htaccess в корневой директории вашего сайта

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

РЕДАКТИРОВАНО: Это действительно просто быстрое решение, могут быть и лучшие варианты. Другой способ - добавить функцию в файл functions.php, которая затем будет вызываться в wp_head() для перенаправления. Используя этот метод, вы также можете разрешить себе просмотр с помощью простой проверки IP-адреса.

23 мая 2011 г. 08:47:45
Комментарии

Это имеет побочный эффект: /wordpress/wp-admin теперь перенаправляет на //wp-admin

Nick Bedford Nick Bedford
23 мая 2011 г. 08:53:28
0

Я создаю сайт на Gatsby с использованием GraphQL, где WordPress выступает в качестве headless CMS. Мне не нравилась мысль о том, что кто-то случайно может попасть в админку WordPress и попытаться взломать её, поэтому я последовал инструкциям @Marcin (см. выше), а именно:

  • создал новую папку темы (я назвал её turn-off-frontend, как предложил @Marcin), внутри которой разместил:
  • файл style.css (с использованием стандартного кода от @Marcin) и
  • index.php

В файле index.php я воспользовался подсказками от @dev_masta, но немного их изменил:

  1. Я не размещал код в header.php — я не создавал этот файл — а добавил его прямо в index.php.
  2. Я не хотел, чтобы редирект вел на страницу WordPress /wp-login.php. Вместо этого я хотел перенаправлять на мой сайт на Gatsby:

Очевидно, что это URL для разработки Gatsby, и его нужно будет изменить на корректный, когда сайт выйдет в продакшен.

    //index.php
    <?php
    /* Перенаправление браузера */
    header("Location: http://localhost:8000");
    exit;

Я загрузил тему turn-off-frontend в wp-content/themes, активировал её, и это сработало. Когда я перешёл по URL WordPress, меня сразу перенаправило на мой сайт Gatsby. Однако, когда я вернулся в админку WordPress > Внешний вид, чтобы отредактировать меню, ссылка "Меню" исчезла!

Чтобы это исправить, я создал файл functions.php внутри темы turn-off-frontend и добавил следующий код (из WordPress Codex):

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

После этого меню снова стало доступным для добавления страниц и записей.

Надеюсь, это кому-то пригодится.

7 мар. 2022 г. 15:15:11
0
Если вам необходимо сохранить работоспособность REST API, добавьте этот код в ваш index.php:

<?php
/**
 * Главный файл WordPress. Сам по себе ничего не делает, а загружает
 * wp-blog-header.php, который инициализирует WordPress и загружает тему.
 *
 * @package WordPress
 */

/**
 * Указывает WordPress загружать тему и выводить её.
 *
 * @var bool
 */
define( 'WP_USE_THEMES', false );

/** Загружает среду WordPress и шаблон */
require __DIR__ . '/wp-blog-header.php';
11 дек. 2020 г. 13:42:00