Nonaktifkan front end untuk digunakan sebagai CMS saja?

18

Saya menggunakan database WordPress dan back end untuk mengelola berita untuk situs web band saya dan semuanya berfungsi dengan baik namun saya ingin menonaktifkan ujung depan WordPress itu sendiri.

Saya sudah menginstal WordPress /wordpress/dan jelas bagian admin di bawah /wordpress/wp-admin/.

Apa cara terbaik untuk membatasi seseorang dari mengakses situs WordPress yang agak * tidak * disetel sendiri tanpa memengaruhi bagian admin?

Jika ada, saya bisa mengarahkan ke halaman beranda situs web yang tepat ( domain.com/).

Nick Bedford
sumber

Jawaban:

19

Untuk memastikan hanya ujung depan yang dialihkan domain.com, buat tema yang menggunakan fungsi header PHP ().

  • Buat folder bernama redirect atau apalah.
  • Tambahkan dua file ke folder: style.cssdan index.php (diperlukan untuk tema WP yang valid)
  • Di style.css, tambahkan sesuatu seperti ini:

    / *
    Nama Tema:
    Deskripsi Pengalihan: Mengarahkan ujung depan ke domain.com
    * /

  • Di index.phptambahkan ini:

    tajuk ("Lokasi: http://domain.com ");

  • Unggah folder ke direktori tema dan kemudian aktifkan di UI admin.
Corey McKrill
sumber
Itu lucu karena cahaya baru saja menyala di kepalaku. Kenapa tidak buat saja tema yang mengalihkan! Terima kasih.
Nick Bedford
1
mungkin jelas bagi sebagian orang tetapi ini hanya bekerja untuk saya ketika baris pertama index.php adalah<?php
finsbury
8

Gunakan tema dengan "data kosong". Letakkan dua file dalam direktori, lalu aktifkan "tema".

style.css

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

dan index.php

<?php
exit;
Marcin
sumber
Saya suka solusi ini, dengan cara ini Anda dapat dengan mudah beralih kembali ke tema yang berfungsi penuh. Selain itu Anda dapat menambahkan sesuatu seperti <?php wp_redirect(site_url('wp-admin'));die();bukannya keluar untuk secara otomatis mengarahkan ulang ke sumber daya yang diberikan.
MiCc83
3

Masukkan ini ke dalam .htaccess Anda dan daftarkan jalur yang Anda ingin tetap tersedia:

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

tambahkan ini ke .htaccess di direktori root Anda

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

EDIT: Ini benar-benar hanya perbaikan cepat, mungkin ada solusi yang lebih baik. Cara lain adalah dengan menambahkan fungsi ke file functions.php Anda, yang kemudian dipanggil di wp_head () untuk mengarahkan ulang cara itu. Dengan menggunakan metode itu Anda juga bisa membiarkan diri Anda melihatnya dengan pemeriksaan IP sederhana.

supajb
sumber
Ini memiliki efek samping yang /wordpress/wp-adminsekarang dialihkan ke//wp-admin
Nick Bedford
1

Meskipun ini adalah pertanyaan yang agak lama dengan jawaban yang sudah diterima, seseorang mungkin menemukan ini berguna, khususnya karena tidak ada solusi yang bekerja untuk saya.

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

Kode itu sendiri cukup jelas:

  • jalankan tanda centang pada kait 'init'
  • periksa apakah halaman yang kita muat adalah ujung depan (bukan wp-admin)
  • redirect ke back end (wp-admin)

Cukup masukkan kode di plugin apa saja atau function.php tema dan itu harus bekerja di luar kotak.

EDIT:

Jika ini tidak berhasil untuk Anda (saya memiliki masalah kecil bahkan dengan kode ini), Anda dapat membuat tema baru (atau tema anak) dan hanya memasukkan konten ini ke dalam header.phpfile:

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

IMO, sebuah plugin akan membutuhkan lebih sedikit pekerjaan dan lebih sesuai untuk kasus tertentu.

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