如何通过REST API传递Get_the_Author_Meta(‘User_Email’)?

时间:2017-09-20 作者:DᴀʀᴛʜVᴀᴅᴇʀ

在我的插件中,如果我在函数中硬编码电子邮件地址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);
});
但是,有没有更好的方式以这种方式在循环之外调用作者的电子邮件?

1 个回复
最合适的回答,由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文件,本地化脚本的句柄名称必须与排队脚本相同

结束

相关推荐

通过AJAX加载图库时,Colorbox在原生WordPress图库上不起作用

我创建了一个下拉菜单,其中有不同的位置作为选项。单击其中一个链接时,将通过AJAX异步加载相应帖子中的内容。我跟着this tutorial 把它拉下来。因此,我在每个位置帖子中都设置了一个本地Wordpress图库,并且我正在使用一个用于lightbox效果的Colorbox插件。当我直接去邮局时,灯箱按预期工作。但是,当通过AJAX将库加载到单独的页面上时,会显示照片,但灯箱不起作用。我想问题可能出在我使用的AJAX调用中。。。以下是JS:(function($) { $(docume