如何将变量传递给函数

时间:2015-05-30 03:12:12

标签: wordpress

我尝试使用SMTP在Wordpress中使用以下代码发送电子邮件,并且它可以正常工作。

localhost:myPort/myHMTLPage.html

(eg. localhost:8000/index.html)

现在我需要为每个SMTP信息使用动态值,例如:

function wow_phpmailer_init( $phpmailer ) {

$phpmailer->SMTPAuth = true;
$phpmailer->Host = 'mail.gmail.com';
$phpmailer->Port = '465';
$phpmailer->Username = 'my_email@gmail.com';
$phpmailer->Password = 'mypassword';
$phpmailer->SMTPSecure = 'ssl';
$phpmailer->Mailer = 'smtp';

}
add_action( 'phpmailer_init', 'wow_phpmailer_init' );

问题是如何在函数wow_phpmailer_init($ phpmailer)中传递动态 $ id 而不使用 GLOBAL var(f 或示例全局$ id; )等?

1 个答案:

答案 0 :(得分:0)

由于我不确定do_action('phpmailer_init')在哪里发生,因此有一些缺失的上下文。最有可能的是它在你的循环中或在计算帖子ID的地方。只要增加add_action函数的参数计数,就可以根据需要将尽可能多的变量传递给do_action。

<?php
// function signature
function wow_phpmailer_init( $phpmailer, $id ) {
    // do stuff
}
// argument count is the 4th parameter
add_action('phpmailer_init', 'wow_phpmailer_init', 10, 2);

// somewhere else in your code you have something like this
do_action('phpmailer_init', $phpmailer, $post_id);

编辑:另一种选择是使用Closure。

<?php
$id = ;// calculated id
add_action('phpmailer_init', function($phpmailer) use ($id) {
    // do stuff
});
wp_mail(); // send mail, which calls do_action('phpmailer_init')