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
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;
}
}