Инициализация окружения WordPress для использования в скрипте командной строки

18 дек. 2012 г., 10:42:44
Просмотры: 19.4K
Голосов: 32

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

Эта проблема очень похожа на Инициализация окружения WordPress для использования в реальном cron-скрипте. Однако она отличается тем, что в упомянутом вопросе речь идет об использовании с (реальным) cron-скриптом, который может быть реализован иначе, чем запуск PHP-скрипта из командной строки. Поскольку на упомянутый вопрос уже есть ответ, который не удовлетворяет моим потребностям, я создал этот вопрос.

Итак, что необходимо сделать в скрипте командной строки для инициализации окружения WordPress?

Связанные вопросы

0
Все ответы на вопрос 2
1
36

Я пришел к следующему решению. Скрипт должен начинаться со следующего кода.

<?php
    if( php_sapi_name() !== 'cli' ) {
        die("Предназначен для запуска из командной строки");
    }

    function find_wordpress_base_path() {
        $dir = dirname(__FILE__);
        do {
            // здесь можно проверять наличие других файлов
            if( file_exists($dir."/wp-config.php") ) {
                return $dir;
            }
        } while( $dir = realpath("$dir/..") );
        return null;
    }

    define( 'BASE_PATH', find_wordpress_base_path()."/" );
    define('WP_USE_THEMES', false);
    global $wp, $wp_query, $wp_the_query, $wp_rewrite, $wp_did_header;
    require(BASE_PATH . 'wp-load.php');

Связанные материалы

18 дек. 2012 г. 10:42:44
Комментарии

Добавлю к этому, что вам нужно выполнить ob_end_clean(); после этого, иначе WordPress будет захватывать весь ваш вывод и не покажет ничего до самого конца.

Hosh Sadiq Hosh Sadiq
30 мая 2016 г. 15:45:49
2
18

Если вы не хотите заниматься сложным процессом ручной загрузки WordPress, вы можете просто использовать команду eval-file в WP-CLI:

wp eval-file my-script.php

Файл my-script.php может содержать любой вызов функции WordPress. Например:

<?php
global $wpdb;

echo implode( ' ', $wpdb->tables() ) . "\n";
11 мар. 2013 г. 20:04:21
Комментарии

Значит, eval-file делает все функции WordPress доступными без необходимости что-либо require? Этот ответ был бы понятнее с кратким примером такого PHP-скрипта.

Kaelin Colclasure Kaelin Colclasure
8 сент. 2014 г. 19:20:42

@KaelinColclasure Да; добавил пример.

scribu scribu
8 сент. 2014 г. 20:24:20