Kurs "WordPress: Pierwsze kroki" (bezpłatna lekcja)

Odezwał się do mnie dawny klient, dla którego kiedyś stworzyłem wtyczkę do wtyczki, czyli wtyczkę modyfikującą pewne standardowe zachowania wtyczki Contact Form 7 do WordPressa. Wtyczka nadal działa, więc zadowolony chciał porozmawiać o nowym projekcie, jaki się u niego szykuje. Przy tej okazji pomyślałem, że mogę podzielić się fragmentem tamtego zlecenia, a mianowicie filtrem blokującym możliwość wysyłania formularza z Contact Form 7 z wybranych domen.

Zakazane domeny w formularzach kontaktowych Contact Form 7 (WordPress)

Domyslnie – co zresztą w większości przypadków najpewniej ma sens – w formularzu kontaktowym można wpisać dowolny adres. Czasem jednak jest potrzeba, by taką możliwość ograniczyć, np. w celu eliminacji skrzynek w ogólnodostępnych adresach (domenach), gdy swoją ofertę kierujemy do firm i zależy nam raczej na kontaktach z adresów firmowych, czyli w firmowych domenach. I choć oczywiście może to też generować problemy, bo sporo właścicieli zwłaszcza mniejszych firm nie korzysta z poczty w ramach swojej domeny, to czasem takie ryzyko i tak się opłaca. Po prostu jest wliczone w model pozyskiwania kontaktów (leadów).

W Contact Form 7 nie znajdziemy takiej opcji, ale możemy podpiąć się pod filtr, za pomocą którego taką walidację (weryfikację), czy adres nadawcy nie znajduje się na zakazanej liście domen, możemy dość łatwo przeprowadzić.

Zaczynamy jednak od funkcji, za pomocą której będziemy sprawdzać adresy e-mail:

function webinsider_wp_cf7_blocked_email_domain( $email ) {
	$blacklist = array( "wp.pl", "onet.pl", "gazeta.pl" );
	$email = strstr( $email, '@' );
	$domain = trim( $email, "@" );
	if( in_array( $domain, $blacklist ) )
		return false; // OK
	else
		return true; // Blokada
}

Mamy tu tablicę „blacklist”, w której umieszczamy „zakazane domeny”, a funkcja zwraca „true” lub „false”, w zależności od tego, czy adres e-mail (domena) znajduje się na tej liście, czy nie.

Kolejny krok, to odpowiedni filtr w Contact Form 7, za pomocą którego uruchamiamy weryfikację:

function webinsider_wp_cf7_custom_email_validation_filter( $result, $tag ) {
	$name = $tag['name'];
	if ( $name == 'your-email') {
		$email = sanitize_email( $_POST[$name] );
		if( ! webinsider_wp_cf7_blocked_email_domain( $email ) ){
			$result['valid'] = false;
			$result->invalidate( $tag, 'Nie możesz użyć adresu e-mail w tej domenie!' );
		};
	};
return $result;
}
add_filter('wpcf7_validate_email','webinsider_wp_cf7_custom_email_validation_filter', 10, 2); 
add_filter('wpcf7_validate_email*', 'webinsider_wp_cf7_custom_email_validation_filter', 10, 2);

W przypadku gdy adres e-mail wpisany w polu o identyfikatorze „your-email” jest w „zakazanej domenie”, to zostanie zablokowana wysyłka wiadomości z formularza, oraz zostanie wyświetlony odpowiedni komunikat.

Gdy w formularzu pole na e-mail nadawcy ma inną nazwę (inny identyfikator), to trzeba go w powyższym kodzie podmienić.

Oba kody możemy dodać do WordPressa jako wtyczkę, lub bezpośrednio do pliku functions.php w motywie potomnym…

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Kurs "WordPress: Pierwsze kroki" (na dobry początek)
Patryk
Tworzysz stronę internetową i potrzebujesz pomocy?