Inicialize o ambiente do WordPress para usar no script de linha de comando

25

Eu tenho um script de linha de comando para manter um plugin wordpress e tenho que carregar o núcleo do wordpress para poder acessar as funções do wordpress.

Esse problema é muito semelhante ao ambiente Initialize WordPress para usar em um script cron real . Embora seja diferente, uma vez que a pergunta referida deve ser usada com um script cron (real) que pode ser realizado de outra forma, iniciando um script php da linha de comando. Como a pergunta referida já está respondida e esta resposta não está satisfazendo minhas necessidades, iniciei esta pergunta.

Então, o que é necessário em um script de linha de comando para inicializar o ambiente wordpress?

Relacionado

xaedes
fonte

Respostas:

27

Eu vim com a seguinte solução. O script deve começar com o seguinte 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
fonte
Só para adicionar isso, você vai querer executar ob_end_clean();depois disso, caso contrário o wordpress captura toda a sua saída e não mostra nada até o fim.
Hosh Sadiq
13

Se você não quiser lidar com o processo complicado de carregar o WordPress manualmente, basta usar o comando do WP-CLIeval-file :

wp eval-file my-script.php

O my-script.phparquivo pode conter qualquer chamada de função WP. Por exemplo:

<?php
global $wpdb;

echo implode( ' ', $wpdb->tables() ) . "\n";
scribu
fonte
Então, eval-filedisponibiliza todas as funções do WordPress sem precisar fazer requirenada? Esta resposta seria mais clara com um exemplo rápido de um script PHP.
Kaelin Colclasure
2
@KaelinColclasure Yep; exemplo adicionado.
scribu