Ініціалізуйте середовище WordPress для використання в сценарії командного рядка


25

У мене є сценарій командного рядка для підтримки плагіна WordPress і я повинен завантажувати ядро ​​wordpress, щоб мати доступ до функцій wordpress.

Ця проблема дуже схожа на середовище Ініціалізація WordPress для використання в реальному скрипті cron . Хоча це і відрізняється від нього, оскільки зазначене питання передбачається для використання із (справжнім) скриптом cron, який можна виконати інакше, запустивши командний рядок php-скрипту. Оскільки на відповідне питання вже відповіли, і ця відповідь не задовольняє моїх потреб, я почав це питання.

Отже, що потрібно в сценарії командного рядка ініціалізувати середовище wordpress?

Пов'язані

Відповіді:


27

Я придумав таке рішення. Сценарій повинен починатися з наступного коду.

<?php
    if( php_sapi_name() !== 'cli' ) {
        die("Meant to be run from command line");
    }

    function find_wordpress_base_path() {
        $dir = dirname(__FILE__);
        do {
            //it is possible to check for other files here
            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');

Пов'язані


Для того, щоб додати це, ви хочете запустити ob_end_clean();після цього, оскільки в іншому випадку wordpress захоплює весь ваш результат і нічого не показує до самого кінця.
Хош Садік

13

Якщо ви не хочете мати справу з процесом брудного вантажної WordPress вручну, ви можете просто використовувати WP-CLI «сек eval-fileкоманду:

wp eval-file my-script.php

my-script.phpФайл може містити будь-який виклик функції WP. Наприклад:

<?php
global $wpdb;

echo implode( ' ', $wpdb->tables() ) . "\n";

Так eval-fileробить усі функції WordPress доступними без requireнічого? Ця відповідь була б більш зрозумілою з короткого прикладу такого сценарію PHP.
Розбіжність Каеліна

2
@KaelinColclasure Yep; доданий приклад.
scribu
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.