是否使用POST方法处理订阅表单?

时间:2015-08-06 作者:Chris

我正在尝试在我的wordpress博客上集成“订阅新闻稿”功能

用户只需输入自己的姓名和电子邮件地址,点击订阅即可。这应该会给我发送一封电子邮件,我会将它们添加到邮件列表中。

我激活了WP SMTP邮件插件,并输入了相关的电子邮件服务器信息,以使WordPress能够发送电子邮件,要求WordPress向我发送一条测试消息,这起到了作用。

现在,每当有人填写姓名时,我都想收到一封电子邮件&;发送电子邮件并点击订阅。

如果我现在这样做,它什么也不做,它会重新加载页面而不发送电子邮件。

我在下面附上了我的代码,有人能帮我吗?

注册表单的代码sidebar.php - 这不是插件。

 <form action="newsletter_signup.php" method="post">
     <p><input class="full" type="text" name="name" placeholder="Your name*"></p>
     <p><input class="full" type="email" name="Email" placeholder="Your email address*"></p>
     <p><input type="submit" class="sub-btn" value="Subscribe"></p>
 </form>
中的代码newsletter_signup.php 文件:

<?php
    require_once(\'wp-load.php\');
    $name = $_POST[\'name\'];
    $Email = $_POST[\'Email\'];
    $to = \'[email protected]\';      
    wp_mail($to, $name, \'From: \' . $Email);
    echo \'Your request Has Been Sent, Thank You. \';
?>

2 个回复
SO网友:jim.duck

此解决方案基于以下几点WPMU Dev plugins: PopUp Pro and Mailchimp Integration. 如果您是WPMU开发人员,请从他们的项目页面或通过WordPress管理界面中的WPMU开发人员仪表板下载并安装它们。大部分工作是为弹出窗口创建自定义样式。Mailchimp集成插件只提供了一个短代码,可以通过TinyMCE按钮添加到弹出窗口的主体中,但我们稍后将介绍所有这些。安装插件后的第一步是配置Mailchimp Integrationplugin。

SO网友:butlerblog

以下是对您的问题的一种过于简单的方法。它并没有涵盖所有的可能性,但它确实让事情开始了。

这是一个条件语句,可以放在表单的位置。您没有明确指出如何将表单放入其中,因此这假设您可以从该位置运行PHP。如果它是一个文本小部件,那么您可能需要做一些稍微不同的事情,但核心概念是相同的。

因此,您有两种显示状态—一种是表单已提交,另一种是表单未提交。如果不是,那么很明显,您正在显示表单。但是,如果表单已经提交,那么您正在处理该数据,发送消息,并显示一条成功消息。

<?php

// Check if the form was submitted.
$formsubmit = ( isset( $_POST[\'formsubmit\'] ) ) ? true : false;

if ( $formsubmit ) {

    // If the form was submitted, process the email and
    // display success message.

    // Get the form values (don\'t forget to sanitize).
    $name  = sanitize_text_field( $_POST[\'name\'] );
    $email = sanitize_email( $_POST[\'email\'] );

    // Who is the message being delivered to?
    $to = \'[email protected]\';

    // Message subject and body:
    $subject  = "Web form signup";
    $message  = "The following signup was submitted: \\r\\n";
    $message .= "Name: " . $name . "\\r\\n";
    $message .= "Email: " . $email;

    // Send the message.
    wp_mail( $to, $subject, $message );

    // Display the success message.
    echo \'<p>Your request Has Been Sent, Thank You.</p>\';

} else { 

    // If the form was not submitted, display the form. ?>

     <form action="newsletter_signup.php" method="post">
         <p><input class="full" type="text" name="name" placeholder="Your name*"></p>
         <p><input class="full" type="email" name="email" placeholder="Your email address*"></p>
         <p><input type="submit" class="sub-btn" value="Subscribe"></p>
         <input type="hidden" name="formsubmit" value="1" />
     </form>
<?php } ?>
这不是一个“终成眷属”的解决方案。这其中有很多分支,也有不同的方法。我的目标是给出一个简单可行的起点,解决大多数人忘记清理表单输入的事实,并纠正wp_mail() 这在原来的问题中是不正确的。

从这里开始,还有其他可能性。其中之一是将处理程序和显示分解为单独的进程,以便根据是否提交表单来显示HTML(即通过快捷码),并且可以在单独的函数中处理所有PHP。为此,您需要将这些元素放在与某些过滤器和/或操作挂钩的函数中。

结束