Khởi tạo môi trường WordPress để sử dụng trong tập lệnh dòng lệnh


25

Tôi có một tập lệnh dòng lệnh để duy trì một plugin wordpress và phải tải lõi wordpress để có thể truy cập các chức năng wordpress.

Vấn đề này rất giống với Khởi tạo môi trường WordPress để sử dụng trong một tập lệnh cron thực sự . Mặc dù nó khác với nó vì câu hỏi được đề xuất được sử dụng với tập lệnh cron (thực) có thể được thực hiện bằng cách khác bằng cách bắt đầu một tập lệnh php dòng lệnh. Vì câu hỏi đã được trả lời và câu trả lời này không thỏa mãn nhu cầu của tôi, tôi bắt đầu câu hỏi này.

Vì vậy, những gì cần thiết trong một kịch bản dòng lệnh để khởi tạo môi trường wordpress?

Liên quan

Câu trả lời:


27

Tôi đã đưa ra giải pháp sau đây. Kịch bản phải bắt đầu với đoạn mã sau.

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

Liên quan


Chỉ cần thêm vào điều này, bạn sẽ muốn chạy ob_end_clean();sau đó vì nếu không wordpress sẽ nắm bắt tất cả đầu ra của bạn và không hiển thị bất cứ điều gì cho đến khi kết thúc.
Hosh Sadiq

13

Nếu bạn không muốn đối phó với quá trình tải WordPress thủ công, bạn chỉ cần sử dụng lệnh của WP-CLIeval-file :

wp eval-file my-script.php

Các my-script.phptập tin có thể chứa bất kỳ cuộc gọi chức năng WP. Ví dụ:

<?php
global $wpdb;

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

Vì vậy, eval-filelàm cho tất cả các chức năng WordPress có sẵn mà không phải requirebất cứ điều gì? Câu trả lời này sẽ rõ ràng hơn với một ví dụ nhanh về tập lệnh PHP như vậy.
Kaelin Colclasure

2
@KaelinColclasure Yep; thêm ví dụ.
scribu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.