Inizializzare l'ambiente WordPress per utilizzarlo in uno script da riga di comando

18 dic 2012, 10:42:44
Visualizzazioni: 19.4K
Voti: 32

Ho uno script da riga di comando per la manutenzione di un plugin WordPress e devo caricare il core di WordPress per poter accedere alle sue funzioni.

Questo problema è molto simile a Inizializzare l'ambiente WordPress per utilizzarlo in uno script cron reale. Tuttavia differisce poiché la domanda citata è pensata per l'uso con uno script cron (reale) che può essere implementato in modo diverso rispetto all'avvio di uno script PHP da riga di comando. Poiché la domanda citata è già stata risposta e quella risposta non soddisfa le mie esigenze, ho aperto questa domanda.

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

Correlati

0
Tutte le risposte alla domanda 2
1
36

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

<?php
    if( php_sapi_name() !== 'cli' ) {
        die("Destinato ad essere eseguito dalla riga di comando");
    }

    function find_wordpress_base_path() {
        $dir = dirname(__FILE__);
        do {
            //è possibile controllare altri file qui
            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');

Correlati

18 dic 2012 10:42:44
Commenti

Per aggiungere a questo, dovrai eseguire ob_end_clean(); dopo, altrimenti WordPress catturerà tutto il tuo output e non mostrerà nulla fino alla fine.

Hosh Sadiq Hosh Sadiq
30 mag 2016 15:45:49
2
18

Se non vuoi affrontare il processo complicato di caricare WordPress manualmente, puoi semplicemente usare il comando eval-file di WP-CLI:

wp eval-file my-script.php

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

<?php
global $wpdb;

echo implode( ' ', $wpdb->tables() ) . "\n";
11 mar 2013 20:04:21
Commenti

Quindi eval-file rende disponibili tutte le funzioni di WordPress senza dover require nulla? Questa risposta sarebbe più chiara con un rapido esempio di uno script PHP di questo tipo.

Kaelin Colclasure Kaelin Colclasure
8 set 2014 19:20:42

@KaelinColclasure Sì; ho aggiunto un esempio.

scribu scribu
8 set 2014 20:24:20