Inicialice el entorno de WordPress para usar en la secuencia de comandos de la línea de comandos

25

Tengo un script de línea de comandos para mantener un complemento de wordpress y tengo que cargar el núcleo de wordpress para poder acceder a las funciones de wordpress.

Este problema es muy similar al del entorno Initialize WordPress para usar en un script cron real . Aunque difiere de él, ya que se supone que la pregunta mencionada se usa con un script cron (real) que se puede lograr de lo contrario iniciando un script php de línea de comando. Como la pregunta referida ya está respondida y esta respuesta no satisface mis necesidades, comencé esta pregunta.

Entonces, ¿qué es necesario en un script de línea de comandos para inicializar el entorno de wordpress?

Relacionado

xaedes
fuente

Respuestas:

27

Se me ocurrió la siguiente solución. El script debe comenzar con el siguiente código.

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

Relacionado

xaedes
fuente
Solo para agregar a esto, querrá ejecutar ob_end_clean();después de eso, de lo contrario, wordpress captura toda su salida y no muestra nada hasta el final.
Hosh Sadiq
13

Si no desea lidiar con el desordenado proceso de cargar WordPress manualmente, puede usar el comando WP-CLIeval-file :

wp eval-file my-script.php

El my-script.phparchivo puede contener cualquier llamada a la función WP. Por ejemplo:

<?php
global $wpdb;

echo implode( ' ', $wpdb->tables() ) . "\n";
scribu
fuente
Entonces, ¿ eval-filetodas las funciones de WordPress están disponibles sin tener que hacer requirenada? Esta respuesta sería más clara con un ejemplo rápido de tal script PHP.
Kaelin Colclasure
2
@KaelinColclasure Sí; ejemplo agregado
scribu