Initialiser l'environnement WordPress à utiliser dans un script de ligne de commande

25

J'ai un script de ligne de commande pour maintenir un plugin wordpress et je dois charger le noyau wordpress pour pouvoir accéder aux fonctions wordpress.

Ce problème est très similaire à Initialize WordPress environnement à utiliser dans un vrai script cron . Bien qu'il en diffère car la question référencée est censée être utilisée avec un (vrai) script cron qui peut être accompli autrement alors en démarrant un script php en ligne de commande. Comme la question référencée a déjà reçu une réponse et que cette réponse ne répond pas à mes besoins, j'ai commencé cette question.

Alors, qu'est-ce qu'il faut dans un script de ligne de commande pour initialiser l'environnement wordpress?

en relation

xaedes
la source

Réponses:

27

J'ai trouvé la solution suivante. Le script doit commencer par le code suivant.

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

en relation

xaedes
la source
Juste pour ajouter à cela, vous voudrez exécuter ob_end_clean();après cela, sinon wordpress capture toute votre sortie et n'affiche rien jusqu'à la fin.
Hosh Sadiq
13

Si vous ne voulez pas traiter avec le processus de désordre de WordPress de chargement manuellement, vous pouvez simplement utiliser WP-CLI de » eval-filela commande:

wp eval-file my-script.php

Le my-script.phpfichier peut contenir n'importe quel appel de fonction WP. Par exemple:

<?php
global $wpdb;

echo implode( ' ', $wpdb->tables() ) . "\n";
scribu
la source
Alors, eval-filerend toutes les fonctions WordPress disponibles sans requirerien avoir à faire ? Cette réponse serait plus claire avec un exemple rapide d'un tel script PHP.
Kaelin Colclasure du
2
@KaelinColclasure Yep; exemple ajouté.
scribu