Cómo inicializar el entorno de WordPress para usar en scripts de línea de comandos

18 dic 2012, 10:42:44
Vistas: 19.4K
Votos: 32

Tengo un script de línea de comandos para el mantenimiento de un plugin de WordPress y necesito cargar el núcleo de WordPress para poder acceder a sus funciones.

Este problema es muy similar a Initialize WordPress environment to use in a real cron script. Aunque difiere porque la pregunta referida está pensada para usarse con un script cron (real) que puede implementarse de otra manera que iniciando un script PHP por línea de comandos. Como la pregunta referida ya tiene respuesta y esa solución no satisface mis necesidades, he creado esta nueva pregunta.

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

Relacionado

0
Todas las respuestas a la pregunta 2
1
36

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

<?php
    if( php_sapi_name() !== 'cli' ) {
        die("Este script está diseñado para ejecutarse desde la línea de comandos");
    }

    function find_wordpress_base_path() {
        $dir = dirname(__FILE__);
        do {
            //Es posible verificar otros archivos aquí
            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

18 dic 2012 10:42:44
Comentarios

Solo para añadir a esto, deberías ejecutar ob_end_clean(); después de eso, ya que de lo contrario WordPress captura toda tu salida y no muestra nada hasta el final.

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

Si no quieres lidiar con el proceso engorroso de cargar WordPress manualmente, puedes simplemente usar el comando eval-file de WP-CLI:

wp eval-file my-script.php

El archivo my-script.php puede contener cualquier llamada a funciones de WP. Por ejemplo:

<?php
global $wpdb;

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

¿Entonces eval-file hace que todas las funciones de WordPress estén disponibles sin necesidad de require nada? Esta respuesta sería más clara con un ejemplo rápido de un script PHP de este tipo.

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

@KaelinColclasure Exacto; he añadido un ejemplo.

scribu scribu
8 sept 2014 20:24:20