Không chỉ là xoá và chỉnh sửa, bạn muốn thêm một hành động tuỳ chỉnh cho Bulk Actions? Vậy bài viết này sẽ giúp bạn thực hiện điều đó.

Đây là kết quả bạn sẽ đạt được:

Thêm hành động tuỳ chỉnh

Bài viết này, mình sẽ tạo thêm một hành động thay đổi hàng loạt trạng thái của các bài viết. Cụ thể hơn là mình muốn thay đổi trạng thái của các bài viết thành “Bản nháp”.

Bạn thêm đoạn code dưới đây vào file functions.php của child hoặc child theme nhé.

add_filter( 'bulk_actions-edit-post', 'hk_custom_bulk_actions' );
function hk_custom_bulk_actions( $bulk_array ) {
	$bulk_array['hk_make_draft'] = 'Sửa thành Bản nháp';
	return $bulk_array;
}

Ở đoạn code trên, mình sử dụng hook bulk_action-eidt-{$screen} Nếu bạn không muốn tạo hành động tuỳ chỉnh cho Bài viết, hay thay đổi giá trị của $screen.

Nếu là Trang, $screen sẽ là page. Cụ thể hơn là bulk_actions-edit-page. Tương tự các loại custom post type khác cũng như vậy nhé.

Xử lý hành động

Sau khi đã thêm hành động thành công ở trên Bulk Actions. Việc tiếp theo là bạn phải xử lý hành động đó. Ở phần này mình sẽ sử dụng đến filter hook handle_bulk_actions-{$screen}. Tương tự như phần trên, bạn phải thay đổi biến $screen sao cho phù hợp với nhu cầu của bạn nhé.

Hãy thêm đoạn code dưới đây vào bên dưới đoạn code ở phần trên.

function hk_bulk_action_handler( $redirect, $doaction, $object_ids ) {
	$redirect = remove_query_arg( array( 'hk_make_draft_done' ), $redirect );

	if ( $doaction == 'hk_make_draft' ) {

		foreach ( $object_ids as $post_id ) {
			wp_update_post( array(
				'ID' => $post_id,
				'post_status' => 'draft' // set status
			) );
		}

		$redirect = add_query_arg(
			'hk_make_draft_done',
			count( $object_ids ),
		$redirect );

	}

	return $redirect;
}

Thông báo sau khi áp dụng hành động

Đây là bước cuối cùng, bạn sẽ tạo một thông báo tuỳ chỉnh sau khi hành động của bạn được áp dụng. Tương tự hai phần trên, hãy thêm đoạn code sau vào file functions.php nhé.

add_action( 'admin_notices', 'hk_bulk_action_notices' );
function hk_bulk_action_notices() {
	if ( ! empty( $_REQUEST['hk_make_draft_done'] ) ) {
		echo '<div id="message" class="updated notice is-dismissible">
			<p>Trạng thái bài viết đã được cập nhập.</p>
		</div>';
	}
}

Đây là kết quả mà bạn sẽ nhận được:

Lời kết

Mình hi vọng bài viết trên sẽ phần nào hỗ trợ bạn tốt hơn trong việc quản lý các bài viết trên WordPress. Nếu bài viết này hữu ích và giúp tiết kiệm được thời gian của bạn, hãy giúp mình chia sẻ nó. Ngoài ra nếu bạn quan tâm đến các chủ đề tương tự như vậy, hãy đọc các bài viết Thủ thuật WordPress khác và follow Fanpage để không bỏ lỡ bài viết mới từ mình nhé.