Ajax 检索电子邮件模板并发送的函数
Ajax function that retrieve an e-mail template and send it
我正在尝试创建一个 ajax 函数来检索电子邮件模板并发送它。到目前为止,这是我的代码:
<?php
add_action('wp_ajax_nopriv_test_function', 'test_function');
add_action('wp_ajax_test_function', 'test_function');
function test_function() {
$content = Array(
"name"=>$_POST['name'],
"email"=>$_POST['email'],
);
ob_start();
include("../emails/email_template.php");
$message = ob_get_contents();
ob_end_clean();
$headers[] = 'Content-Type: text/html; charset=UTF-8';
wp_mail($_POST['email'], "[E-mail subject] This is a test", $message, $headers);
$result['feedback'] = "All OK!";
}
wp_send_json($result);
die();
}
?>
- ajax 调用有效。我得到 response.feedback 正确,即使知道它不是 "All OK!".
- 可以分析
email_template.php
by clicking here。它基本上是一个响应式电子邮件模板,从 $contents
接收一些 PHP 变量。参见第 313 行。
不幸的是,我收到了这个错误:
PHP Fatal error: Unknown: Cannot use output buffering in output buffering display handlers in Unknown on line 0, referer: http://example.com/
.
我在这里和其他来源进行了搜索,但没有找到合适的答案。我错过了什么吗?这可能吗?
提前致谢:)
将我的代码更改为:
<?php
add_action('wp_ajax_nopriv_test_function', 'test_function');
add_action('wp_ajax_test_function', 'test_function');
function test_function() {
ob_start();
$content = Array(
"nome"=>$_POST['nome_registro'],
"email"=>$_POST['email_registro'],
);?>
<?php include(ABS_PATH_DEFINED_ELSEWHERE."my-plugin/inc/emails/email_template.php"); ?>
<?php
$message = ob_get_contents();
ob_end_clean();
$headers[] = 'Content-Type: text/html; charset=UTF-8';
wp_mail($_POST['email'], "[E-mail subject] This is a test", $message, $headers);
$result['feedback'] = "All OK!";
}
wp_send_json($result);
die();
}
?>
工作起来很有魅力:)
谁能解释为什么之前的代码不起作用?
很抱歉 post 将此作为答案,但我没有足够的分数来 post 发表评论。几周来我一直在关注这个问题,因为我对工作代码和非工作代码之间的关键区别非常好奇。我绝对不明白原始解决方案有什么问题。出于好奇,您能否在调用 ob_start()
之前添加以下代码
error_log( 'before ob_start(): ' . print_r( debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS ), true ) );
只有在输出缓冲回调中调用 ob_start() 时才会出现您遇到的错误。我真的不明白这在你给定的代码中是如何发生的,但也许回溯会显示一些东西。
我知道几周过去了,也许您已经对这个问题失去了兴趣,但希望您和我一样,仍然想了解原因。我已经多次查看这段代码,看不出任何问题,真的很想了解哪里出了问题。
提前感谢您的考虑。
更新:
我使用以下插件测试了您的代码:
<?php
/*
Plugin Name: Gruby's Problem
*/
add_action('wp_ajax_nopriv_test_function', 'test_function');
add_action('wp_ajax_test_function', 'test_function');
function test_function() {
$content = Array(
"name"=>$_POST['name'],
"email"=>$_POST['email'],
);
ob_start();
include("email_template.php");
$message = ob_get_contents();
ob_end_clean();
$headers[] = 'Content-Type: text/html; charset=UTF-8';
wp_mail($_POST['email'], "[E-mail subject] This is a test", $message, $headers);
$result['feedback'] = "All OK!";
wp_send_json($result);
die();
}
add_shortcode( 'send_gruby_ajax_test', function() {
?>
<button id="gruby_send_ajax_test">Send Gruby Ajax Test</button>
<script>
jQuery( 'button#gruby_send_ajax_test' ).click( function() {
jQuery.post( '<?php echo admin_url( 'admin-ajax.php' ); ?>', { action: 'test_function', name: 'Magenta', email: 'xxx@xxx.com' }, function( r ) {
console.log( r );
} );
} );
</script>
<?php
} );
?>
我必须解决 2 个问题 - 删除行后的无关“}”
$result['feedback'] = "All OK!";
并在 email_template.php
中更改了第 313 行
Your order has shipped, <?php echo $content['nome'];?>!
至
Your order has shipped, <?php echo $content['name'];?>!
经过这些更改后,代码按预期工作。所以你的原始代码在我的环境中确实有效。我仍然很好奇你是如何让你的代码失败的。你能不能 运行 我的插件,看看它是否会导致与以前相同的错误。要测试插件,您需要创建一个包含 post 内容的页面:
[send_gruby_ajax_test]
这将显示一个按钮,单击该按钮将发送 'test_function' 的 AJAX 请求。
我正在尝试创建一个 ajax 函数来检索电子邮件模板并发送它。到目前为止,这是我的代码:
<?php
add_action('wp_ajax_nopriv_test_function', 'test_function');
add_action('wp_ajax_test_function', 'test_function');
function test_function() {
$content = Array(
"name"=>$_POST['name'],
"email"=>$_POST['email'],
);
ob_start();
include("../emails/email_template.php");
$message = ob_get_contents();
ob_end_clean();
$headers[] = 'Content-Type: text/html; charset=UTF-8';
wp_mail($_POST['email'], "[E-mail subject] This is a test", $message, $headers);
$result['feedback'] = "All OK!";
}
wp_send_json($result);
die();
}
?>
- ajax 调用有效。我得到 response.feedback 正确,即使知道它不是 "All OK!".
- 可以分析
email_template.php
by clicking here。它基本上是一个响应式电子邮件模板,从$contents
接收一些 PHP 变量。参见第 313 行。
不幸的是,我收到了这个错误:
PHP Fatal error: Unknown: Cannot use output buffering in output buffering display handlers in Unknown on line 0, referer: http://example.com/
.
我在这里和其他来源进行了搜索,但没有找到合适的答案。我错过了什么吗?这可能吗?
提前致谢:)
将我的代码更改为:
<?php
add_action('wp_ajax_nopriv_test_function', 'test_function');
add_action('wp_ajax_test_function', 'test_function');
function test_function() {
ob_start();
$content = Array(
"nome"=>$_POST['nome_registro'],
"email"=>$_POST['email_registro'],
);?>
<?php include(ABS_PATH_DEFINED_ELSEWHERE."my-plugin/inc/emails/email_template.php"); ?>
<?php
$message = ob_get_contents();
ob_end_clean();
$headers[] = 'Content-Type: text/html; charset=UTF-8';
wp_mail($_POST['email'], "[E-mail subject] This is a test", $message, $headers);
$result['feedback'] = "All OK!";
}
wp_send_json($result);
die();
}
?>
工作起来很有魅力:)
谁能解释为什么之前的代码不起作用?
很抱歉 post 将此作为答案,但我没有足够的分数来 post 发表评论。几周来我一直在关注这个问题,因为我对工作代码和非工作代码之间的关键区别非常好奇。我绝对不明白原始解决方案有什么问题。出于好奇,您能否在调用 ob_start()
之前添加以下代码error_log( 'before ob_start(): ' . print_r( debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS ), true ) );
只有在输出缓冲回调中调用 ob_start() 时才会出现您遇到的错误。我真的不明白这在你给定的代码中是如何发生的,但也许回溯会显示一些东西。
我知道几周过去了,也许您已经对这个问题失去了兴趣,但希望您和我一样,仍然想了解原因。我已经多次查看这段代码,看不出任何问题,真的很想了解哪里出了问题。
提前感谢您的考虑。
更新: 我使用以下插件测试了您的代码:
<?php
/*
Plugin Name: Gruby's Problem
*/
add_action('wp_ajax_nopriv_test_function', 'test_function');
add_action('wp_ajax_test_function', 'test_function');
function test_function() {
$content = Array(
"name"=>$_POST['name'],
"email"=>$_POST['email'],
);
ob_start();
include("email_template.php");
$message = ob_get_contents();
ob_end_clean();
$headers[] = 'Content-Type: text/html; charset=UTF-8';
wp_mail($_POST['email'], "[E-mail subject] This is a test", $message, $headers);
$result['feedback'] = "All OK!";
wp_send_json($result);
die();
}
add_shortcode( 'send_gruby_ajax_test', function() {
?>
<button id="gruby_send_ajax_test">Send Gruby Ajax Test</button>
<script>
jQuery( 'button#gruby_send_ajax_test' ).click( function() {
jQuery.post( '<?php echo admin_url( 'admin-ajax.php' ); ?>', { action: 'test_function', name: 'Magenta', email: 'xxx@xxx.com' }, function( r ) {
console.log( r );
} );
} );
</script>
<?php
} );
?>
我必须解决 2 个问题 - 删除行后的无关“}”
$result['feedback'] = "All OK!";
并在 email_template.php
中更改了第 313 行Your order has shipped, <?php echo $content['nome'];?>!
至
Your order has shipped, <?php echo $content['name'];?>!
经过这些更改后,代码按预期工作。所以你的原始代码在我的环境中确实有效。我仍然很好奇你是如何让你的代码失败的。你能不能 运行 我的插件,看看它是否会导致与以前相同的错误。要测试插件,您需要创建一个包含 post 内容的页面:
[send_gruby_ajax_test]
这将显示一个按钮,单击该按钮将发送 'test_function' 的 AJAX 请求。