创建WordPress联系表单

 

很多博客都建立了一个联系页面,在这个页面上放置一个联系表单,是一个非常好的选择,实现的方法也是多种多样,你可以嵌入一个第三方的联系表单,也可以使用WordPress内置的评论功能达到同样的效果,不过更多的人士选择了使用诸如Contact Form 7之类的插件,不过,加入仅仅是为了添加一个简单的联系表单,我们大可不必这么大费周章,几段代码就可以解决问题。

为什么不建议使用上述的几种方法呢,第三方服务不可控因素太多,且需要调用第三方服务器的脚本,而通过评论方法,显得不太专业,还需要通过评论发送邮件。

下面就是通过建立页面模板的方式创建一个表单页面,直接发送到管理员邮箱。

首先,创建一个页面模板,最好的办法就是复制你的主题的默认的页面模板,一般是名称为page.php的文件。以默认主题Twenty_Twelve 为例

<?php
/**
 * The template for displaying all pages.
 *
 * This is the template that displays all pages by default.
 * Please note that this is the WordPress construct of pages
 * and that other 'pages' on your WordPress site will use a
 * different template.
 *
 * @package WordPress
 * @subpackage Twenty_Twelve
 * @since Twenty Twelve 1.0
 */

get_header(); ?>

	<div id="primary" class="site-content">
		<div id="content" role="main">                           表单代码位置

			<?php while ( have_posts() ) : the_post(); ?>
				<?php get_template_part( 'content', 'page' ); ?>
				<?php comments_template( '', true ); ?>
			<?php endwhile; // end of the loop. ?>

		</div><!-- #content -->
	</div><!-- #primary -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>

</p>

将头部修改成下面的样子:

<?php
/*
Template Name: Contact
*/
?>

<?php get_header() ?>

将文件另存为Contact.php。

然后,我们开始创建一个表单,并且加入错误和成功的提示

<?php if(isset($emailSent) && $emailSent == true) { ?>
                            <div class="alert alert-success">
                                <p>感谢您的联系,您的邮件已经成功发送.</p>
                            </div>
                        <?php } else { ?>

                            <?php if(isset($hasError) || isset($captchaError)) { ?>
                                <div class="alert alert-error">
                                    <a class="close" data-dismiss="alert">×</a>
                                    <h4 class="alert-heading">对不起,发生了错误.</h4>
                                <p class="error">请检查输入框下面的错误提示并重试!<p>
                                </div>
                            <?php } ?>

                    <form action="<?php the_permalink(); ?>" id="contactForm" method="post" class="form-horizontal">
                        <fieldset>
                        <div class="control-group ">
                                <label class="control-label" for="contactName">名称:</label>
                            <div class="controls">
                                <input class="input-xlarge" type="text" name="contactName" id="contactName" value="" />
                                <?php if($nameError != '') { ?>
                                    <p><span class="label label-warning"><?=$nameError;?></span></p>
                                <?php } ?>
                            </div>
                           </div>
                           <div class="control-group">
                                <label class="control-label" for="email">邮箱:</label>
                            <div class="controls">
                                <input class="input-xlarge" type="text" name="email" id="email" value="" />
                                <?php if($emailError != '') { ?>
                                    <p><span class="label label-warning"><?=$emailError;?></span></p>
                                <?php } ?>
                             </div>
                           </div>
                            <div class="control-group">
                                <label class="control-label" for="commentsText">内容:</label>
                            <div class="controls">
                                <textarea class="span7" name="comments" id="commentsText" rows="20" cols="30"></textarea>
                                 <?php if($commentError != '') { ?>
                                    <p><span class="label label-warning"><?=$commentError;?></span></p>
                                <?php } ?>
                             </div>
                           </div>
                           <div class="form">
                                <button type="submit" class="btn btn-primary">发送</button>
                           </div>
                        <input type="hidden" name="submitted" id="submitted" value="true" />
                    </fieldset>
                    </form>
                    <?php } ?>

<input type="hidden" name="submitted" id="submitted" value="true" />
</form>

</p>

加入到上面的提示的位置之中。

接下来,我们需要加入校验有效性或者未填写项目的检测功能,在

<?php get_header() ?>

上面插入

<?php
if(isset($_POST['submitted'])) {
    if(trim($_POST['contactName']) === '') {
        $nameError = '请输入您的名称.';
        $hasError = true;
    } else {
        $name = trim($_POST['contactName']);
    }

    if(trim($_POST['email']) === '')  {
        $emailError = '请输入您的邮箱,以方便回复.';
        $hasError = true;
    } else if (!preg_match("/^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+.[a-z]{2,4}$/i", trim($_POST['email']))) {
        $emailError = '邮箱的格式有错误哦.';
        $hasError = true;
    } else {
        $email = trim($_POST['email']);
    }

    if(trim($_POST['comments']) === '') {
        $commentError = '请输入一些内容.';
        $hasError = true;
    } else {
        if(function_exists('stripslashes')) {
            $comments = stripslashes(trim($_POST['comments']));
        } else {
            $comments = trim($_POST['comments']);
        }
    }

    if(!isset($hasError)) {
        if (!isset($emailTo) || ($emailTo == '') ){
            $emailTo = get_option('admin_email');
        }
        $subject = '[StrapPress] From '.$name;
        $body = "Name: $name nnEmail: $email nnComments: $comments";
        $headers = 'From: '.$name.' <'.$emailTo.'>' . "rn" . 'Reply-To: ' . $email;

        wp_mail($emailTo, $subject, $body, $headers);
        $emailSent = true;
    }

} ?>

至此,一个联系表单的页面模板就算做好了,只要在WordPress中使用此模板新建一个页面就可以看到效果。