Neden wp_mail () düz eski PHP mail () yapacağı zaman Kimden: başlığını ayarlamama izin vermiyor?


32

Kullandığımda wp_mail( $to, $subject, $message, $headers )(değerler yerindeyse) e-posta, bulabildiğim herhangi bir yerde ayarlanmamış bir ad ve e-posta ile gönderilir (PHP veya Apache ayarlarında bile değil). Ancak, mail( $to, $subject, $message, $headers )bunun yerine sadece iyi çalışıyor. Buna neden olmak için neler olabilir wp_mail()?

Yanıtlar:


44

Merhaba @helenyhou:

Üstbilgiyi sadece bir parametreyle değil, ayarlayabilirsiniz. WordPress "kancaları" kullanır ve ihtiyacınız olan kancalar 'wp_mail_from've 'wp_mail_from_name'kancalar.

E-posta adresini kullanırken başlığı functions.phpdeğiştirmek için temanıza ekleyebileceğiniz kancalar :"From:"wp_mail()Helen Hou-Sandi <helenyhou@example.com>

add_filter('wp_mail_from','yoursite_wp_mail_from');
function yoursite_wp_mail_from($content_type) {
  return 'helenyhou@example.com';
}
add_filter('wp_mail_from_name','yoursite_wp_mail_from_name');
function yoursite_wp_mail_from_name($name) {
  return 'Helen Hou-Sandi';
}

Sadece filtrelere bakıyordum ve haklısın, sorunu çözdü. Sanırım Kodeks güncellenmeli mi? codex.wordpress.org/Function_Reference/wp_mail Şununla da alakalı: bu, güçlü GravityForms dahil, pek çok form eklentisini etkiliyor gibi görünüyor. Şu anda özel bir form yazıyorum, ancak WP'nin böyle davranması gerekiyorsa, normal eski yöntemi kullanarak başlıkları neden diğerlerine (ve hatta diğer sitelerimden bazılarına) göre ayarlıyorum?
helenhousandi

@helenyhou - Diğer formları etkilememek için filtreleri hemen önce eklentinize eklemeniz ve wp_mail()hemen sonra bunları kaldırmanız gerekir. Başlıkları ayarlama neden işe yarıyorsa, diğer kullanım durumlarınızın ne olduğunu bilmiyorum ama wp_mail()bu şekilde çalışacak olsaydı şaşırırdım.
MikeSchinkel

2
Ahhhh Olanları buldum - başka bir eklenti, istemediğim ve vazgeçemediğim bir şey için filtreleri global olarak ekliyordu - kötü, kötü, kötü. Şimdi sıradan başlıklar sonuçta işe yarıyor. Görünüşe göre bu filtreleri kullanmak en iyisidir, eğer oradalarsa.
helenhousandi

Buraya bir eklentinin eklediği herhangi bir filtrenin remove_filter (HOOK, FUNCTION) ile kaldırılabileceğini not edin.
Jason Coleman

yalnızca e-posta alanından gelen siteyle aynıysa çalışır.
Omer,

4

From: "Your Name" <youremail@example.com>\r\nBaşlığı biçiminde kullanıyorsanız, bir sorun yaşamamalısınız (wp_mail işlevini geçersiz kılan bir eklenti yüklü değilse).

Ancak, Mike'ın dediği gibi, nihai değerleri bu filtrelerle filtreleyebilir veya bu eklentiyi yükleyebilirsiniz:

Gönderen

Wp_mail'de hangi adın ve e-postanın kullanılacağını belirleyen bir seçenek ayarı sunar.


1

Eski bir soruyu canlandırdığım için özür dilerim, ancak bu şekilde başlıklar aracılığıyla ayarlamak daha iyi olmaz:

$subject  = "MyPlugin: Alert (".get_bloginfo('wpurl').")";
$headers  = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=".get_bloginfo('charset')."" . "\r\n";
$headers .= "From: MyPlugin <".$this->settings['from_address'].">" . "\r\n";
wp_mail($this->settings['notify_address'], $subject, $alertMessage, $headers);

Bu şekilde, bir filtre kullanmaktan ve sonra wp_mail () 'den sonra kaldırmak için endişelenmenize gerek yoktur.


2
Filtreyi ben ayarlamadım, başka bir eklenti yaptı. Filtre başlık üzerinde önceliklidir. Ayrıca, gerçekten kullanmalıdır site_url()yerineget_bloginfo('wpurl')
helenhousandi

Ama sonra kesinlikle bu eklenti kendisinden sonra temizlemek değil için kötü .... gerçi bu konuda yapabileceğin bir şey değil :( Bu durumda, başka bir eklenti kırılmış olması durumunda filtre kullanmak için benim eklenti değiştirmek daha iyi.
Brady

@helenyhou - site_url () hakkında hatırlattığın için +1. Eklentimi de $ headers kullanmak yerine filtreler kullanacak şekilde değiştirdim. Ayrıca, e-postayı gönderdiğimde bu filtreleri kaldırdığımdan emin oldum, böylece başka bir şey yapmamak için :)
Brady

evet, bu eklenti bana bu filtreleri kullanmama seçeneği sunmadığım için kötü, ama neyse ki davam için işe yarayan filtreleri yorumladım. Muhtemelen gelecekte hangisinin daha iyi kullanılacağını görmek için soracağım - kullanım başına bir filtre veya daha fazla bilinen başlıklar. Başlıklar muhtemelen daha verimlidir, ancak o zaman neden bu filtreler orada? Her zaman daha fazla soru :)
helenhousandi

Mevcut sürümden itibaren, kullanımı tamamen kabul edilebilir get_bloginfo('wpurl'): Bu site_url()zaten döner . get_bloginfo('home')ve get_bloginfo('siteurl')kullanımdan kaldırıldı. developer.wordpress.org/reference/functions/get_bloginfo
James M

1

Biraz kesmek, ancak Reply Tobaşlık etiketini de kullanabilirsiniz :

$headers = 'Reply-To: "Aaren A. Aarenson" <aaron@somemail.com>';

Ne yazık ki bu , e-posta adresini Kimden listesine ekler ve yanıtlama, wp_mail_fromfiltrede yapılandırılan adresi el ile kaldırmanız gerekeceği anlamına gelir .


Bu benim için düzeltti. Bir hayat arkadaşı kurtardın! ;)
user382738

0

Ben de aynı problemi yaşadım. Benim için barındırma sağlayıcısının (BlueHost) alanını değiştirmesini engellediği ortaya çıktı. İşte bunu https://my.bluehost.com/cgi/help/206 adresinde açıklıyorlar .

E-postayı, söyledikleri gibi cPanel posta kutularına ekleyerek sorunu düzelttim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.