通过表单中的隐藏字段发送模板中的PHP变量的值

时间:2017-06-09 作者:Alvin

在页面模板中,我有一个变量,用于存储帖子ID的数组。

我希望用户能够通过单击该模板前端页面上的按钮,在电子邮件中发送该数据。电子邮件应该包括数组中每个帖子的post\\u标题和永久链接,最好还包括其他元数据。我还需要包括有关当前登录用户的信息-display\\u name和user\\u email。

我认为使用查询变量不是一个可行的选择,因为数组中最多可以有数百个ID。

我找到的最接近的向导是here, 但这是为了将当前的post数据传递到表单。

1 个回复
最合适的回答,由SO网友:Milo 整理而成

简而言之,不要将所有数据与表单一起发送。

您知道表单包含哪些数据,并且电子邮件必须从服务器发送,因此没有理由让这些数据往返于浏览器和服务器。

设置某种类型的唯一标识符,并使用该标识符获取需要发送的任何数据,无论该数据是否附加到当前页面、当前登录用户等。。

这里有一个概念的快速证明。

首先,输出表单的短代码。在这里,我们展示了两种可能的识别表单的方法,一种是与短代码一起提供的ID,另一种是当前页面ID。我们还检查用户是否登录,以及是否显示表单或显示刚刚提交的消息。

function wpd_form_shortcode( $atts ){
    $a = shortcode_atts( array(
        \'form_id\' => 0,
    ), $atts );

    if( is_user_logged_in() ){

        if( isset( $_GET[\'sent\'] ) ){
            $form = \'form submitted\';
        } else {
            $form = \'<form method="post" action="\' . admin_url( \'admin-post.php\' ) . \'">\';
            $form .= \'<input type="hidden" name="action" value="wpd_send_form">\';
            $form .= \'<input type="hidden" name="form_id" value="\' . $a[\'form_id\'] . \'">\';
            $form .= \'<input type="hidden" name="post_id" value="\' . get_the_ID() . \'">\';
            $form .= \'<input type="submit" value="Submit">\';
            $form .= \'</form>\';
        }

    } else {

        $form = \'You must be logged in\';

    }

    return $form;
}
add_shortcode( \'wpd_form\', \'wpd_form_shortcode\' );
现在,动作连接到admin_post 上述表格所指。这里我们展示了如何获取传递的值、获取当前登录的用户以及发送电子邮件。您应该在这里获取这些post-id,无论是来自post-meta、user-meta等,然后迭代每个post-id来构建电子邮件。

function wpd_send_form_function() {

    // get the form ID or post ID
    // use these to get whatever data you need, get_post_meta, etc.
    $form_id = $_POST[\'form_id\'];
    $post_id = $_POST[\'post_id\'];

    // get the current logged in user info
    $current_user = wp_get_current_user();

    // put the data in the content of the email and send it
    $to = \'you@example.com\';
    $subject = \'Email from \' . $current_user->user_login;
    $body = \'Email from post_id \' . $post_id;

    wp_mail( $to, $subject, $body );

    // redirect back to the page that contained the form we just submitted
    wp_safe_redirect( $_SERVER[\'HTTP_REFERER\'] . \'?sent=true\', 303 );
    exit;
}
add_action( \'admin_post_wpd_send_form\', \'wpd_send_form_function\' );
// uncomment next line if you want to allow users who aren\'t logged in
// add_action( \'admin_post_nopriv_wpd_send_form\', \'wpd_send_form_function\' );
您还应该研究在表单中使用nonce,以及进行一些基本检查,以确保您拥有有效的帖子ID,用户有权访问该帖子的数据,等等。。

结束

相关推荐

恢复CForms II表单预置

我有个客户不得不重新激活cforms II contact forms plugin. 它拒绝并给出以下错误:*Fatal error*: Cannot use string offset as an array in */var/www/vhosts/site.com/httpdocs/wp-content/plugins/cforms/lib_activate.php* <http://site.com/httpdocs/wp-content/plugins/cform