Tạo lệnh WP-CLI tuỳ chỉnh cho WordPress: Hướng dẫn chi tiết với functions.php

WP-CLI là công cụ dòng lệnh mạnh mẽ giúp quản lý WordPress một cách nhanh chóng và hiệu quả. Ngoài các lệnh có sẵn như wp plugin install, wp post create, bạn có thể tự định nghĩa các command riêng để phục vụ nhu cầu cá nhân hoặc quản lý website tốt hơn.

Tạo lệnh WP-CLI tuỳ chỉnh cho WordPress: Hướng dẫn chi tiết với functions.php

1. Cách Định Nghĩa Command Cho WP-CLI

Để tạo command riêng cho WP-CLI, bạn chỉ cần sử dụng hook WP_CLI::add_command() trong file functions.php của theme hoặc plugin. Lệnh này sẽ giúp WP-CLI nhận diện và thực thi một lệnh mới mà bạn tự định nghĩa.

Cấu Trúc Cơ Bản

// functions.php

if ( defined( 'WP_CLI' ) && WP_CLI ) {
    WP_CLI::add_command( 'my_command', 'my_command_function' );
}

Trong đó:

  • my_command: tên của lệnh mà bạn muốn sử dụng trong WP-CLI.
  • my_command_function: hàm PHP sẽ xử lý logic cho command này.

2. Tạo Command Đơn Giản: In Ra Lời Chào

Ví dụ đơn giản nhất là tạo command “hello” để in ra lời chào:

// functions.php

if ( defined( 'WP_CLI' ) && WP_CLI ) {
    WP_CLI::add_command( 'hello', 'wpcli_hello' );
}

function wpcli_hello() {
    WP_CLI::success( 'Hello, WP-CLI!' );
}

Giải thích:

  • Hàm wpcli_hello sẽ được gọi khi người dùng gõ lệnh wp hello trong terminal.
  • Hàm WP_CLI::success() sẽ in ra thông báo “Hello, WP-CLI!” trong màu xanh lá cây nếu lệnh thành công.

3. Thêm Tham Số Cho Command

Bạn có thể thêm tham số vào command của mình để linh hoạt hơn. Ví dụ, tạo command chào người dùng với tên được chỉ định:

// functions.php

if ( defined( 'WP_CLI' ) && WP_CLI ) {
    WP_CLI::add_command( 'greet', 'wpcli_greet' );
}

function wpcli_greet( $args, $assoc_args ) {
    $name = $args[0] ?? 'World'; // Lấy tên từ tham số
    WP_CLI::success( 'Hello, ' . $name . '!' );
}

Lệnh này sẽ chấp nhận tham số đầu vào. Nếu người dùng nhập wp greet John, kết quả sẽ là “Hello, John!”.

4. Thêm Các Tham Số Đặt Tên

Bạn có thể sử dụng tham số dạng tên, giúp người dùng dễ dàng hiểu và sử dụng command. Ví dụ, tạo lệnh xóa tất cả bài viết thuộc một thể loại cụ thể:

// functions.php

if ( defined( 'WP_CLI' ) && WP_CLI ) {
    WP_CLI::add_command( 'delete_category_posts', 'wpcli_delete_category_posts' );
}

function wpcli_delete_category_posts( $args, $assoc_args ) {
    $category_name = $assoc_args['category'] ?? ''; // Tham số category
    if ( empty( $category_name ) ) {
        WP_CLI::error( 'Category name is required!' );
        return;
    }

    $category = get_category_by_slug( $category_name );
    if ( !$category ) {
        WP_CLI::error( 'Category not found!' );
        return;
    }

    $posts = get_posts( array(
        'category' => $category->term_id,
        'posts_per_page' => -1,
    ));

    foreach ( $posts as $post ) {
        wp_delete_post( $post->ID, true ); // Xóa bài viết
    }

    WP_CLI::success( 'All posts in category "' . $category_name . '" have been deleted.' );
}

Trong ví dụ này, command wp delete_category_posts --category=your-category sẽ xóa tất cả bài viết trong thể loại được chỉ định.

5. Thêm Quá Trình Kiểm Tra và Lỗi

Đảm bảo rằng command của bạn xử lý các trường hợp lỗi và thông báo thích hợp:

// functions.php

if ( defined( 'WP_CLI' ) && WP_CLI ) {
    WP_CLI::add_command( 'check_posts', 'wpcli_check_posts' );
}

function wpcli_check_posts() {
    $posts = get_posts( array( 'numberposts' => 10 ) );
    if ( empty( $posts ) ) {
        WP_CLI::error( 'No posts found!' );
    } else {
        WP_CLI::success( 'Found ' . count( $posts ) . ' posts.' );
    }
}

Với ví dụ này, lệnh wp check_posts sẽ trả về thông báo lỗi nếu không có bài viết nào được tìm thấy và thông báo thành công nếu có bài viết.

6. Kết Luận

Việc tạo các command WP-CLI của riêng bạn giúp tiết kiệm thời gian và dễ dàng quản lý WordPress qua dòng lệnh. Thực hiện các công việc tự động hóa, xóa bài viết, xử lý dữ liệu nhanh chóng với WP-CLI sẽ cải thiện hiệu suất công việc. Hãy thử tự tạo các lệnh cho các tác vụ thường xuyên mà bạn làm.

Tip: Đừng quên kiểm tra kỹ lưỡng các lệnh bạn định triển khai trên website live để tránh các lỗi không đáng có.

Bình Luận


  • Không có bình luận.