Inizializza l'ambiente WordPress da utilizzare nello script della riga di comando


25

Ho uno script da riga di comando per mantenere un plugin wordpress e devo caricare il core di wordpress per poter accedere alle funzioni di wordpress.

Questo problema è molto simile all'inizializzazione dell'ambiente WordPress da utilizzare in uno script cron reale . Sebbene differisca da esso in quanto la domanda a cui si fa riferimento dovrebbe essere utilizzata con uno script cron (reale) che può essere realizzato altrimenti avviando uno script php a riga di comando. Poiché la domanda pregiudiziale ha già una risposta e questa risposta non soddisfa le mie esigenze, ho iniziato questa domanda.

Quindi cosa è necessario in uno script da riga di comando per inizializzare l'ambiente wordpress?

Relazionato

Risposte:


27

Ho trovato la seguente soluzione. Lo script deve iniziare con il seguente codice.

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

Relazionato


Solo per aggiungere a questo, ti consigliamo di eseguire ob_end_clean();dopo che altrimenti Wordpress cattura tutto il tuo output e non mostra nulla fino alla fine.
Hosh Sadiq,

13

Se non vuoi occuparti del disordinato processo di caricamento manuale di WordPress, puoi semplicemente usare il comando di WP-CLIeval-file :

wp eval-file my-script.php

Il my-script.phpfile può contenere qualsiasi chiamata di funzione WP. Per esempio:

<?php
global $wpdb;

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

Quindi eval-filerende disponibili tutte le funzioni di WordPress senza dover fare requirenulla? Questa risposta sarebbe più chiara con un rapido esempio di tale script PHP.
Kaelin Colclasure

2
@KaelinColclasure Yep; esempio aggiunto.
scribu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.