Ответы пользователя по тегу WordPress
  • Как вынести wp-config.php и wp-content за пределы папки c ядром wordpress?

    neins
    @neins Автор вопроса
    Спустя долгое время публикую свое решение. Как оказалось вордпресс поддерживает данное решение почти из коробки и сделать все это не так уж и сложно.

    Схема такая: есть папка с ядром WP и есть папки с проектами. В моем случае папка ядра это C://localhost/wordpress.local, а папка с проектом C://dev/projects/example/(static | wp).

    В папке с ядром содержатся только необходимые компоненты для функционирования CMS и на эту папку мы вешаем домен wordpress.local, тут мы только слегка изменяем файл wp-config – он будет предназначен для подключения внешней папки wp-content нашего проекта и данных для подключения к БД, убираем папку wp-content из папки с ядром за ненадобностью.

    Внутри папки проекта находятся две папки static и wp, в нашем случае нам нужна папка wp которая в свою очередь уже будет содержать необходимые нам папку wp-content и файлы wp-config-dev.php и wp-config.php. Данные для подключения к БД для локальной разработки будут находится в wp-config-dev, а деплоить будем wp-config.php, содержание которого не отличается от обычного файла конфига для вордпресса.

    Из дополнительного необходимо в настройках виртуальных хостов расшарить нашу папку с проектами в качестве домена для константы WP_CONTENT_URL'.

    Содержимое wp-config.php ядра Wordpress
    <?php
    $project = 'example';
    define( 'WP_CONTENT_DIR', 'C://DEV/projects/'.$project.'/wp/wp-content' );
    define( 'WP_CONTENT_URL', 'http://projects.folder/'.$project.'/wp/wp-content' );
    include('C://DEV/projects/'.$project.'/wp/wp-config-dev.php');
    if ( ! defined( 'ABSPATH' ) ) {
    	define( 'ABSPATH', dirname( __FILE__ ) . '/' );
    }
    require_once( ABSPATH . 'wp-settings.php' );


    Содержимое wp-config-dev.php проекта Wordpress
    <?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_';


    Файл виртуальных хостов httpd-vhosts.conf
    <Directory "C://DEV/projects/*">
        Options Indexes FollowSymLinks Includes ExecCGI
        AllowOverride All
        Require all granted
    </Directory>
    
    # Для WP_CONTENT_URL
    <Directory "C://DEV/projects">
        Options Indexes FollowSymLinks Includes ExecCGI
        AllowOverride All
        Require all granted
    </Directory>
    <VirtualHost *:80>
        DocumentRoot "C://DEV/projects"
        ServerName projects.folder
        # Заклинание против CORS
        Header set Access-Control-Allow-Origin "*"
    </VirtualHost>


    В итоге мы отделяем ядро вордпресса от конкретного проекта – можно легко переключаться между проектами всего лишь поменяв значение переменной $project в конфиге ядра (я это делаю с помощью шелл скрипта, их уже использую в гульпе и других местах, тут уже как вам удобнее) а также версионируется и деплоится только папка с проектом(темой-плагинами-загрузками итд), ядро не тащится в гит и его также можно загрузить на хост отдельно.
    Ответ написан
    Комментировать