web-dev-qa-db-fra.com

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

J'ai un script en 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 à Initialise l’environnement WordPress à utiliser dans un vrai script cron . Bien que cela en soit différent, la question renvoyée est supposée être utilisée avec un script cron (réel), ce qui peut être accompli autrement en démarrant un script php en ligne de commande. Comme la question posée a déjà reçu une réponse et que cette réponse ne satisfait pas mes besoins, j'ai commencé cette question.

Alors, qu'est-ce qui est nécessaire dans un script de ligne de commande pour initialiser l'environnement wordpress?

Connexes

24
xaedes

Je suis venu avec 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');

Connexes

25
xaedes

Si vous ne souhaitez pas gérer le processus fastidieux de chargement manuel de WordPress, vous pouvez simplement utiliser la commande WP-CLI 's eval-file:

wp eval-file my-script.php

Le fichier my-script.php peut contenir n’importe quel appel de fonction WP. Par exemple:

<?php
global $wpdb;

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