簡體   English   中英

阿帕奇。 如何將 wp-config.php 和 wp-content 從 wordpress 核心移出?

[英]Apache. How to move wp-config.php and wp-content outside from wordpress core?

當我在本地機器上開發它們時,我想為所有主題使用一個 wordpress 核心。 例如,位於C:\\xampp\\wordpress\\www上的 wordpress 核心,它有一個來自 Apache https://wordpress.local的 VirtualHost。 主題位於C:\\gulp\\projects ,這里是所有帶有靜態網站的項目(文件夾),這里是我想將所有 wp 主題存儲在它們自己的文件夾中。 每個 wp 主題文件夾內是wp-config.phpwp-content文件夾。 我想將每個 wp 主題文件夾存儲在 git versioning 上,我計划通過 gulp 切換項目,只需替換核心中 wp 配置中的路徑。 我計划僅在本地機器上執行此操作,並且僅出於開發原因,我只想在服務器上推送更改。 我不想為每個新項目在 apache 中創建一個新的虛擬域和文件夾,我不想將 wordpress 核心抓取到 git 版本控制。

我試圖在核心define( 'WP_CONTENT_DIR', 'C:\\gulp\\projects\\TEST-WP-THEME\\wp-content' )更改配置中的路徑define( 'WP_CONTENT_DIR', 'C:\\gulp\\projects\\TEST-WP-THEME\\wp-content' ) ,但不幸的是 wp 核心無法“看到”目錄和那里只有當我在瀏覽器中訪問我的域時才會出現白屏。 我想 apache 無法“看到” C:\\xampp\\wordpress\\www之外的目錄,但我相信可以配置 apache 使其可以連接“服務器”之外的目錄。 如何將外部wp-config.phpwp-content文件夾連接到 wp 核心,誰知道如何做到這一點,請幫助我。

很長一段時間后,我發布了我的解決方案。 例如:WP 核心將存儲在C://wordpress.local/文件夾中,我們將為該文件夾創建一個http://wordpress.local域。 所有項目都將在C://projects/ 每個項目都有自己的wp-content文件夾, wp-config-dev.php (用於數據庫憑據和表前綴)和我們部署在服務器上的常用wp-config.php

我們將在C://projects/example/wp一個名為example C://projects/example/wp

Core 的wp-config.php

<?php
$project = 'example';
define( 'WP_CONTENT_DIR', 'C:/projects/'.$project.'/wp/wp-content' );
define( 'WP_CONTENT_URL', 'https://projects.folder/'.$project.'/wp/wp-content' );
include('C:/projects/'.$project.'/wp/wp-config-dev.php');
if ( ! defined( 'ABSPATH' ) ) {
    define( 'ABSPATH', dirname( __FILE__ ) . '/' );
}
require_once( ABSPATH . 'wp-settings.php' );
// custom functions (optional)
include('custom.php');

項目的wp-core-dev.php

<?php
define( 'DB_NAME', 'example' );
define( 'DB_USER', 'root' );
define( 'DB_PASSWORD', '' );
define( 'DB_HOST', 'localhost' );
define( 'DB_CHARSET', 'utf8mb4' );
define( 'DB_COLLATE', '' );
$table_prefix = 'wp_';

此外,您必須在 Apache 的httpd-vhosts.conf您的項目文件夾共享為域

<Directory "C://projects/*">
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted
</Directory>

# For WP_CONTENT_URL
<Directory "C://projects">
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted
</Directory>
<VirtualHost *:80>
    DocumentRoot "C://projects"
    ServerName projects.folder
    # CORS
    Header set Access-Control-Allow-Origin "*"
</VirtualHost>

瞧,您可以通過更改$project變量在項目之間切換,我個人使用 bash 腳本和 sed 來完成。


獎金。 將我們所有的項目放在 WP 管理欄中並制作項目選擇器。

將函數添加到您的.bashrc

function wp-set-project {
    local projname="$*"
    # in my case $project is always on second line
    sed -i "2s|.*|\$project = '$projname';|" /c/wordpress.local/wp-config.php
}

編輯我們包含在核心wp-config.php可選custom.php文件

add_action('admin_bar_menu', 'add_project_switch', 999);
function add_project_switch($admin_bar){

//get current project name from $project variable, read second line from file
preg_match('/\'(.*?)\'/', file('C://wordpress.local/wp-config.php')[1], $result);
$currWpProject = $result[1]; //result from second mask without quotes

//get all projects
$wpProjects = array();
foreach(glob('C://projects/*/wp', GLOB_ONLYDIR) as $proj) {
    $wpProjects[] = explode('/', $proj)[3]; //get dir name
}

$admin_bar->add_menu( array(
    'id'    => 'curr-proj',
    'title' => '🚧 Project: '.$currWpProject,
));

foreach($wpProjects as $proj) {
    if ($proj !== $currWpProject) {
        $admin_bar->add_menu( array(
            'id'    => 'project-'.$proj,
            'parent' => 'curr-proj',
            'title' => $proj,
            'href'  => '?setWp='.$proj, //make link with get parametr
        ));
    }
}

}

//Call our bash function if there is passed GET with project name
$setWp = filter_input( INPUT_GET, 'setWp');

if($setWp){
    //for running bash that way in Windows you have to put your bash.exe in PATH
    shell_exec ('bash -c "source ~/.bashrc && wp-set-project '.$setWp.'"');
    header("Location: "."http://".$_SERVER['HTTP_HOST']);
    exit();
}

最終我們得到了一個漂亮而方便的項目選擇器:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM