Inisialisasi lingkungan WordPress untuk digunakan dalam skrip baris perintah

25

Saya memiliki skrip baris perintah untuk mempertahankan plugin wordpress dan harus memuat inti wordpress untuk dapat mengakses fungsi wordpress.

Masalah ini sangat mirip dengan menginisialisasi lingkungan WordPress untuk digunakan dalam skrip cron nyata . Meskipun berbeda dari itu karena pertanyaan yang dimaksud seharusnya digunakan dengan skrip cron (nyata) yang dapat diselesaikan sebaliknya dengan memulai skrip php baris perintah. Karena pertanyaan yang dimaksud sudah dijawab dan jawaban ini tidak memuaskan kebutuhan saya, saya memulai pertanyaan ini.

Jadi apa yang diperlukan dalam skrip baris perintah untuk menginisialisasi lingkungan wordpress?

Terkait

xaedes
sumber

Jawaban:

27

Saya datang dengan solusi berikut. Script harus dimulai dengan kode berikut.

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

Terkait

xaedes
sumber
Hanya untuk menambah ini, Anda akan ingin menjalankan ob_end_clean();setelah itu karena jika tidak wordpress menangkap semua output Anda dan tidak menunjukkan apa-apa sampai akhir.
Hosh Sadiq
13

Jika Anda tidak ingin berurusan dengan proses berantakan loading WordPress secara manual, Anda hanya dapat menggunakan WP-CLI 's eval-fileperintah:

wp eval-file my-script.php

The my-script.phpFile dapat berisi fungsi WP panggilan. Sebagai contoh:

<?php
global $wpdb;

echo implode( ' ', $wpdb->tables() ) . "\n";
juru tulis
sumber
Jadi eval-fileapakah semua fungsi WordPress tersedia tanpa harus requireapa - apa? Jawaban ini akan lebih jelas dengan contoh cepat dari skrip PHP semacam itu.
Kaelin Colclasure
2
@KaelinColclasure Yap; menambahkan contoh.
scribu