web-dev-qa-db-ja.com

コマンドラインスクリプトで使用するためにWordPress環境を初期化します

私はワードプレスプラグインを維持するためのコマンドラインスクリプトを持っていて、ワードプレス機能にアクセスすることができるようにワードプレスコアをロードしなければなりません。

この問題は 本物のcronスクリプトで使うWordPress環境を初期化すること - に非常に似ています 。それはそれとは異なりますが、それ以外の場合はコマンドラインのphpスクリプトを起動することによって達成することができます(実際の)cronスクリプトで使用するために言及された質問が想定されています。言及された質問はすでに答えられていて、この答えは私のニーズを満たしていないので、私はこの質問を始めました。

では、コマンドラインスクリプトでwordpress環境を初期化するために何が必要ですか?

関連

24
xaedes

私は以下の解決策を思い付きました。スクリプトは次のコードで始める必要があります。

<?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');

関連

25
xaedes

手動でWordPressをロードするという面倒なプロセスに対処したくない場合は、 WP-CLIeval-fileコマンドを使用することができます。

wp eval-file my-script.php

my-script.phpファイルには、任意のWP関数呼び出しを含めることができます。例えば:

<?php
global $wpdb;

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