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


25

wordpressプラグインを管理するためのコマンドラインスクリプトがあり、wordpressの機能にアクセスするにはwordpressコアをロードする必要があります。

この問題は、実際のcronスクリプトで使用するWordPress環境の初期化に非常に似ています。それとは異なりますが、参照されている質問は(実際の)cronスクリプトでの使用が想定されているため、そうでない場合はコマンドラインphpスクリプトを起動することで実現できます。参照された質問にはすでに回答があり、この回答が私のニーズを満たしていないため、この質問を始めました。

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

関連する

回答:


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-CLIeval-fileコマンドを使用するだけです:

wp eval-file my-script.php

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

<?php
global $wpdb;

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

それではeval-file、WordPressのすべての機能をrequire何もせずに利用できるようにしますか?この答えは、このようなPHPスクリプトの簡単な例でより明確になります。
Kaelin Colclasure

2
@KaelinColclasureうん; 例を追加しました。
スクリブ14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.