Tự động cập nhật domain cho Contact form 7 khi chuyển website

Khi bạn chuyển website WordPress từ localhost lên server thật, hoặc thay đổi tên miền A sang tên miền B, Contact Form 7 thường hiển thị cảnh báo màu vàng (warning) ở phần cài đặt email. Thông báo này xuất hiện vì địa chỉ email gửi đi (From) vẫn đang sử dụng tên miền cũ, không khớp với tên miền hiện tại của website.

Ví dụ: Website của bạn đã chuyển từ localhost sang vutruso.com, nhưng email gửi đi vẫn là wordpress@localhost thay vì wordpress@vutruso.com.

Thay vì phải vào từng form để sửa thủ công, đoạn code dưới đây sẽ tự động cập nhật địa chỉ email cho tất cả các Contact Form 7 trên website của bạn.

Tự động cập nhật tên miền cho Contact Form 7

Bước 1: Thêm code vào functions.php

  1. Truy cập Giao diện → Trình soạn thảo tệp tin (Appearance → Theme File Editor)
  2. Chọn file functions.php của theme đang sử dụng
  3. Kéo xuống cuối file và dán đoạn code sau:
/**
 * Tự động cập nhật domain trong cài đặt email Contact Form 7
 * Contact -> Contact Forms -> Form cụ thể -> Mail -> From
 */
if ( ! function_exists( 'mp_update_cf7_mail_from_in_postmeta' ) ) {
	// Chạy cập nhật mỗi khi vào trang quản trị
	add_action( 'admin_init', 'mp_update_cf7_mail_from_in_postmeta' );
	function mp_update_cf7_mail_from_in_postmeta() {
		global $wpdb;
		$domain = parse_url( home_url(), PHP_URL_HOST );
		
		// Lấy tất cả các form Contact Form 7
		$forms = $wpdb->get_results( "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'wpcf7_contact_form'" );
		
		// Hàm hỗ trợ cập nhật cài đặt email
		$update_mail_settings = function( $form_id, $meta_key ) use ( $domain ) {
			$mail_settings = get_post_meta( $form_id, $meta_key, true );
			if ( ! $mail_settings || ! is_array( $mail_settings ) ) {
				return;
			}
			
			// Thay thế "sender"
			if ( isset( $mail_settings['sender'] ) && ! empty( $mail_settings['sender'] ) ) {
				$mail_settings['sender'] = preg_replace(
					'/<.*@.*>/',
					"<wordpress@$domain>",
					$mail_settings['sender']
				);
			}
			
			// Thay thế "from"
			if ( isset( $mail_settings['from'] ) && ! empty( $mail_settings['from'] ) ) {
				$mail_settings['from'] = preg_replace(
					'/<.*@.*>/',
					"<wordpress@$domain>",
					$mail_settings['from']
				);
			}
			
			update_post_meta( $form_id, $meta_key, $mail_settings );
		};
		
		// Duyệt qua tất cả các form
		foreach ( $forms as $form ) {
			$update_mail_settings( $form->ID, '_mail' );
			$update_mail_settings( $form->ID, '_mail_2' );
		}
	}
}
  1. Nhấn Cập nhật tập tin (Update File)

Bước 2: Kích hoạt code

Sau khi thêm code, bạn chỉ cần:

  1. Truy cập vào Trang quản trị WordPress (wp-admin)
  2. Code sẽ tự động chạy và cập nhật tất cả các form

Bạn không cần làm gì thêm!

Sau khi chạy xong bạn nên xoá code đi vì code đã hoàn thành sứ mệnh của mình rồi 😀

Bạn lưu bài viết lại khi nào đổi domain hoặc di chuyển tên miền thì hãy áp dụng code này lại.

Sau khi chạy xong sẽ hết thông báo

Code hoạt động như thế nào?

Đoạn code này hoạt động một cách thông minh:

Tự động phát hiện domain mới: Mỗi khi bạn truy cập trang quản trị WordPress, code sẽ tự động lấy tên miền hiện tại của website.

Quét tất cả Contact Form 7: Code tìm kiếm tất cả các form Contact Form 7 đang có trên website.

Cập nhật địa chỉ email: Với mỗi form tìm thấy, code sẽ thay thế địa chỉ email cũ bằng địa chỉ mới với domain hiện tại.

Ví dụ: wordpress@domain-cu.com sẽ được đổi thành wordpress@domain-moi.com.

Xử lý cả Mail và Mail (2): Code cập nhật cho cả phần Mail chính và Mail phụ (nếu có bật).

Lợi ích của giải pháp

Tiết kiệm thời gian: Không cần vào từng form để sửa thủ công

Tự động hóa hoàn toàn: Chỉ cần thêm code một lần, sau đó mọi thứ tự động

An toàn: Code kiểm tra kỹ trước khi cập nhật, tránh gây lỗi

Hữu ích khi chuyển website: Đặc biệt tiện lợi khi di chuyển từ localhost lên hosting hoặc đổi domain

Loại bỏ cảnh báo: Không còn thông báo warning màu vàng khó chịu

Lưu ý quan trọng

  • Code chỉ cập nhật phần địa chỉ email (domain), không thay đổi các thiết lập khác của form
  • Nếu bạn đang sử dụng Child Theme, hãy thêm code vào file functions.php của Child Theme
  • Code hoàn toàn an toàn và không ảnh hưởng đến dữ liệu form đã gửi
  • Sau khi thêm code, bạn có thể kiểm tra bằng cách vào Contact → Contact Forms → chọn một form bất kỳ → tab Mail để xem địa chỉ email đã được cập nhật chưa

Kết luận

Với đoạn code đơn giản này, bạn sẽ không còn phải lo lắng về việc cập nhật domain cho Contact Form 7 mỗi khi chuyển website.

Mọi thứ diễn ra tự động, giúp bạn tập trung vào công việc quan trọng hơn là chăm sóc khách hàng và phát triển doanh nghiệp.

Nếu có bất kỳ thắc mắc nào, đừng ngại liên hệ với đội ngũ hỗ trợ của chúng tôi!

5/5 - (217 votes)

Nếu bạn thấy bài viết có ích bạn có thể chia sẻ bài viết này. Yêu cầu thêm bài viết tại đây
Đã copy
vutruso

Vũ Trụ Số chuyên cung cấp hosting cho WordPress, dịch vụ thiết kế website, quản trị website cho doanh nghiệp, các dịch vụ bảo mật website WordPress, tăng tốc website WordPress

Bài viết liên quan