在我的插件中,如果我在函数中硬编码电子邮件地址wp_mail()
或mail()
我可以使用我的表格:
function email_form($ip_address, $agent, $referrer, $email, $name, $message) {
$to = "[email protected]";
$subject = "Hard Coded";
$email_body =
"IP ADDRESS: " . $ip_address . "\\n" .
"USER AGENT: " . $agent . "\\n\\n" .
"EMAIL: " . $email . "\\n" .
"NAME: " . $name . "\\n" .
"MESSAGE: " . $message . "\\n";
mail("$to", "$subject", "$email_body", "From: $email");
}
但是,当我尝试添加基于作者的电子邮件时,使用:
$to = get_the_author_meta(\'user_email\');
来自
global $post;
它不会发送电子邮件。
如果我在模板的开头构建一个函数并设置一个变量,我可以让作者触发,但我认为这种方法是不正确的。我可以创建一个设置页面,但我希望收件人是页面的作者。在将处理发送到另一个PHP文件的页面模板中,传递作者关于页面帖子类型或任何其他WP相关数据的电子邮件的正确方式是什么(the_title()
, 主题等)通过WP_REST_Request
?
<小时>
EDIT:
在发现我应该去之后
wp_localize_script
我撰写了:
function foobar() {
if (is_page_template(\'page-foo.php\')) {
wp_enqueue_script( \'bar_js\', site_url() . \'/js/bar.js\', array(\'jquery\'), \'1.0.0\', true);
$localized = array(
\'url_string\' => site_url(),
\'form_id\' => get_the_ID(),
\'author_email\' => get_the_author_meta(\'user_email\', get_post_field(\'post_author\', get_the_ID())),
);
wp_localize_script(\'bar_js\', \'form_object\', $localized);
};
}
add_action(\'wp_enqueue_scripts\', \'foobar\');
并通过了
bar.js
:
jQuery(document).ready(function($) {
console.log(\'file is being detected\'); // FOR TESTING
console.log(form_object.author_email);
});
但是,有没有更好的方式以这种方式在循环之外调用作者的电子邮件?
最合适的回答,由SO网友:Johansson 整理而成
为什么我无法访问Post的信息
当您使用Admin AJAX或REST API时,您只能访问当前用户的数据(我的意思是默认情况下,例如使用
is_user_logged_in()
). 要检索任何其他信息,必须在AJAX请求中将其作为参数传递。WordPress不会在AJAX请求中加载全部内容,因此您必须找到一种解决方法。
使用隐藏输入:
因为您无法访问任何与帖子相关的信息(例如帖子的ID),所以方法是包含隐藏输入并向其中添加额外数据:
<input id="my-hidden-input" type="hidden" value="User ID Here" />
在你的
page.php
文件现在,您可以使用以下简单的jQuery命令获取它:
var userId = $(\'#my-hidden-input\').val();
本地化脚本:有一个更好的替代方法,可以使用
wp_localize_script()
. 假设您正在将主JS文件排队,如下所示:
wp_enqueue_script(\'my-js-handle\',\'some/path/here.js\');
您可以通过本地化将必要的数据传递给JS文件。例如,我们需要传递帖子的ID。我们可以通过创建条件并本地化脚本来实现这一点:
if( is_page() ){
$localization_array(
\'post_id\' => get_the_ID(),
);
wp_localize_script( \'my-js-handle\', \'my_object_name\', $localization_array, )\'
}
现在,我们可以在脚本中访问帖子的ID,简单如下:
window.alert( my_object_name.post_id );
一些注意事项:
- 要使用第二种方法,您应该有一个排队的JS文件,本地化脚本的句柄名称必须与排队脚本相同