WP-CLI

¿Quieres patrocinar?

¿Quieres aparecer aquí? Si quieres patrocinar este blog, ponte en contacto conmigo a través de este formulario

Añade una barra de progreso a tus comandos WP-CLI

En entradas anteriores vimos parte de lo que podemos hacer con WP-CLI. Una de sus mayores virtudes es poder crear tus propios comandos para realizar acciones en lote, por ejemplo.

Últimamente me ha tocado desarrollar un par de comandos para importar y exportar información de una manera muy concreta, es decir, no podía utilizar el exportador de WordPress ni ningún plugin del repositorio.

Para ver cómo va la tarea una vez ejecutas el comando, es de mucha ayuda disponer de una barra de progreso, y en WP-CLI es muy fácil.

Haremos uso del método make_progress_bar, que recibe como parámetros el texto del encabezado y el número total de items a iterar:

$progress = \WP_CLI\Utils\make_progress_bar( 'Progress Bar', count((array)$posts) );

A continuación, en cada iteración del bucle llamaremos al método tick:

$progress->tick();

Y al finalizar el bucle:

$progress->finish();

Muy fácil, ¿no? Esto nos daría una información en pantalla muy útil para saber cómo va la ejecución de nuestro script

wp cli progress bar

Resumiendo

La clase donde creamos nuestro comando quedaría así:

<?php

class Import {
    /**
     * Import myposttype.
     *
     * ## OPTIONS
     *
     * [--dry-run]
     * : If set no changes will be made
     * ---
     * default: success
     * options:
     *   - success
     *   - error
     * ---
     *
     * ## EXAMPLES
     *
     *     wp mycommand myposttype --dry-run
     *
     * @when after_wp_load
     */
    public function myposttype( $args, $assoc_args ) {
        $report = $this->import_my_data( 'myposttype', $origin_url, isset( $assoc_args['dry-run'] ) );

        \WP_CLI\Utils\format_items( 'table', $report, array( 'ID', 'Title' ) );
    }

    private function import_my_data( $post_type, $url, $dry_run = true ) {
        $args = array(
            'post_type' => 'myposttype',
        );
        $posts = get_posts( $args );

        $progress = \WP_CLI\Utils\make_progress_bar( 'Progress Bar', count((array)$posts) );

        foreach ( $posts as $post ) {
            // your code and your actions
            $report[] = array(
                'ID' => $post->ID,
                'Title' => $post->post_title
            );

            $progress->tick();
        }

        $progress->finish();

        return $report;
    }
}

¿Te ha resultado útil esta información?

Si este post te ha resuelto un problema, invítame a un café o a una cerveza. Con este pequeño gesto me animas a seguir escribiendo.