當(dāng)前位置:首頁>WordPress建站>用戶交互>為你的 WordPress 主題創(chuàng)建內(nèi)置的聯(lián)系表單

為你的 WordPress 主題創(chuàng)建內(nèi)置的聯(lián)系表單

有許多WordPress插件都可以為你的博客添加一個(gè)聯(lián)系表單,但是似乎并沒有這個(gè)必要,因?yàn)椋诮裉斓倪@個(gè)教程中,我將向大家介紹一個(gè)不用插件就能為你的WordPress主題創(chuàng)建一個(gè)內(nèi)置式聯(lián)系表單的方法,并為表單加上一個(gè)jQuery的驗(yàn)證功能,簡單,易用,可靠。

一個(gè)內(nèi)置聯(lián)系表單形如下圖所示,十分簡單:

add-contact-form-for-wordpress-theme-wpdaxue_com

創(chuàng)建一個(gè)頁面模板

將主題中page.php 文件里的代碼復(fù)制到一個(gè)新文件,并將這個(gè)新文件命名為contact.php,然后在此文件的開頭加上這樣的一段注釋(你可以從WordPress后臺新建一個(gè)叫"Contact"的頁面):

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

之后這個(gè)contact.php文件看起來應(yīng)該象這樣:

<?php
/*
Template Name: Contact
*/
?>
 
<?php get_header() ?>
 
    <div id="container">
        <div id="content">
            <?php the_post() ?>
            <div id="post-<?php the_ID() ?>" class="post">
                <div class="entry-content">
                                //這里放入表單代碼
                </div><!-- .entry-content ->
            </div><!-- .post-->
        </div><!-- #content -->
    </div><!-- #container -->
 
<?php get_sidebar() ?>
<?php get_footer() ?>

創(chuàng)建表單

現(xiàn)在,我們需要建立一個(gè)簡單的表單了,只需將下面的代碼復(fù)制并粘貼到<div class="entry-content">……</div>這對標(biāo)簽之間:

倡萌注:如果你的頁面結(jié)構(gòu)不一樣,可以找到

<?php the_content(); ?>

將下面的代碼復(fù)制并粘貼到它的下面,這樣就可以了。

<form action="<?php the_permalink(); ?>" id="contactForm" method="post">
    <ul>
        <li>
            <label for="contactName">姓名:</label>
            <input type="text" name="contactName" id="contactName" value="" />
        </li>
        <li>
            <label for="email">郵箱:</label>
            <input type="text" name="email" id="email" value="" />
        </li>
        <li>
            <label for="commentsText">郵件內(nèi)容:</label>
            <textarea name="comments" id="commentsText" rows="20" cols="30"></textarea>
        </li>
        <li>
            <button type="submit">發(fā)送郵件</button>
        </li>
    </ul>
    <input type="hidden" name="submitted" id="submitted" value="true" />

代碼看起來十分簡單,也不用再作多余解釋了。注意一下,上面最后一行inputtype值是”hidden” ,稍后用于檢驗(yàn)表單是否已經(jīng)提交。

表單數(shù)據(jù)驗(yàn)證和錯(cuò)誤處理

到此,這個(gè)表單看起來已經(jīng)很帥了,但還不能使用,因?yàn)檫€沒有發(fā)送任何郵件,所以我們需要做的就是要驗(yàn)證一下表單提交及其所填內(nèi)容是否正確。

我們需要作如下判斷:如果表單填寫正確,則獲取管理員郵箱地址并發(fā)送內(nèi)容;如果表單填寫有誤,則提示錯(cuò)誤。將下面的代碼粘貼到模板聲明和get_header()函數(shù)的中間:

<?php
if(isset($_POST['submitted'])) {
    if(trim($_POST['contactName']) === '') {
        $nameError = 'Please enter your name.';
        $hasError = true;
    } else {
        $name = trim($_POST['contactName']);
    }
 
    if(trim($_POST['email']) === '')  {
        $emailError = 'Please enter your email address.';
        $hasError = true;
    } else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) {
        $emailError = 'You entered an invalid email address.';
        $hasError = true;
    } else {
        $email = trim($_POST['email']);
    }
 
    if(trim($_POST['comments']) === '') {
        $commentError = 'Please enter a message.';
        $hasError = true;
    } else {
        if(function_exists('stripslashes')) {
            $comments = stripslashes(trim($_POST['comments']));
        } else {
            $comments = trim($_POST['comments']);
        }
    }
 
    if(!isset($hasError)) {
        $emailTo = get_option('tz_email');
        if (!isset($emailTo) || ($emailTo == '') ){
            $emailTo = get_option('admin_email');
        }
        $subject = '[PHP Snippets] From '.$name;
        $body = "Name: $name \n\nEmail: $email \n\nComments: $comments";
        $headers = 'From: '.$name.' <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $email;
 
        mail($emailTo, $subject, $body, $headers);
        $emailSent = true;
    }
 
} ?>

我們這樣做的目的是為了確保表單已經(jīng)提交并且填寫正確,如果存在錯(cuò)誤,如表單留空或者郵件地址不正確等,就會(huì)返回錯(cuò)誤信息,表單提交發(fā)送失敗。

現(xiàn)在,我們需要在相關(guān)表單區(qū)域設(shè)置顯示錯(cuò)誤信息,比如在姓名一欄的下方顯示“請輸入你的郵箱地址”等,以下是整個(gè)表單contact.php模板的代碼結(jié)構(gòu):

<?php
/*
Template Name: Contact
*/
?>
 
<?php
if(isset($_POST['submitted'])) {
    if(trim($_POST['contactName']) === '') {
        $nameError = 'Please enter your name.';
        $hasError = true;
    } else {
        $name = trim($_POST['contactName']);
    }
 
    if(trim($_POST['email']) === '')  {
        $emailError = 'Please enter your email address.';
        $hasError = true;
    } else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) {
        $emailError = 'You entered an invalid email address.';
        $hasError = true;
    } else {
        $email = trim($_POST['email']);
    }
 
    if(trim($_POST['comments']) === '') {
        $commentError = 'Please enter a message.';
        $hasError = true;
    } else {
        if(function_exists('stripslashes')) {
            $comments = stripslashes(trim($_POST['comments']));
        } else {
            $comments = trim($_POST['comments']);
        }
    }
 
    if(!isset($hasError)) {
        $emailTo = get_option('tz_email');
        if (!isset($emailTo) || ($emailTo == '') ){
            $emailTo = get_option('admin_email');
        }
        $subject = '[PHP Snippets] From '.$name;
        $body = "Name: $name \n\nEmail: $email \n\nComments: $comments";
        $headers = 'From: '.$name.' <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $email;
 
        mail($emailTo, $subject, $body, $headers);
        $emailSent = true;
    }
 
} ?>
<?php get_header(); ?>
    <div id="container">
        <div id="content">
 
            <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
            <div <?php post_class() ?> id="post-<?php the_ID(); ?>">
                <h1 class="entry-title"><?php the_title(); ?></h1>
                    <div class="entry-content">
                        <?php if(isset($emailSent) && $emailSent == true) { ?>
                            <div class="thanks">
                                <p>Thanks, your email was sent successfully.</p>
                            </div>
                        <?php } else { ?>
                            <?php the_content(); ?>
                            <?php if(isset($hasError) || isset($captchaError)) { ?>
                                <p class="error">Sorry, an error occured.<p>
                            <?php } ?>
 
                        <form action="<?php the_permalink(); ?>" id="contactForm" method="post">
                            <ul class="contactform">
                            <li>
                                <label for="contactName">Name:</label>
                                <input type="text" name="contactName" id="contactName" value="<?php if(isset($_POST['contactName'])) echo $_POST['contactName'];?>" class="required requiredField" />
                                <?php if($nameError != '') { ?>
                                    <span class="error"><?=$nameError;?></span>
                                <?php } ?>
                            </li>
 
                            <li>
                                <label for="email">Email</label>
                                <input type="text" name="email" id="email" value="<?php if(isset($_POST['email']))  echo $_POST['email'];?>" class="required requiredField email" />
                                <?php if($emailError != '') { ?>
                                    <span class="error"><?=$emailError;?></span>
                                <?php } ?>
                            </li>
 
                            <li><label for="commentsText">Message:</label>
                                <textarea name="comments" id="commentsText" rows="20" cols="30" class="required requiredField"><?php if(isset($_POST['comments'])) { if(function_exists('stripslashes')) { echo stripslashes($_POST['comments']); } else { echo $_POST['comments']; } } ?></textarea>
                                <?php if($commentError != '') { ?>
                                    <span class="error"><?=$commentError;?></span>
                                <?php } ?>
                            </li>
 
                            <li>
                                <input type="submit">Send email</input>
                            </li>
                        </ul>
                        <input type="hidden" name="submitted" id="submitted" value="true" />
                    </form>
                <?php } ?>
                </div><!-- .entry-content -->
            </div><!-- .post -->
 
                <?php endwhile; endif; ?>
        </div><!-- #content -->
    </div><!-- #container -->
 
<?php get_sidebar(); ?>
<?php get_footer(); ?>

添加jQuery表單驗(yàn)證功能

其實(shí)我們制作的這個(gè)表單到此已經(jīng)可以正常使用了,但是我們可以在驗(yàn)證功能上進(jìn)一步加強(qiáng),添加jQuery用戶端驗(yàn)證過程,配合一個(gè)插件validate jQuery plugin,此插件很不錯(cuò),對于表單驗(yàn)證快速準(zhǔn)確而且簡單,我們可以到這里下載jQuery validate plugin,將插件上傳到我們主題的/js目錄下,然后再將下面這一段代碼粘貼進(jìn)一個(gè)新文件中,保存文件名為 verif.js

$(document).ready(function(){
    $("#contactForm").validate();
});

現(xiàn)在,我們必須將這個(gè)javascript文件跟我們的主題連接起來,打開 header.php文件,將下面的代碼粘貼在<head> 和 </head> 這對標(biāo)簽的中間:

<?php if( is_page('contact') ){ ?>
    <script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/js/jquery.validate.min.js"></script>
    <script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/js/verif.js"></script>
<?php }?>

這樣做之后,保存一下文件,完工!

然后,你只需要發(fā)布一個(gè)新頁面,然后選擇 Contact  模板即可。

參考資料:catswhocode

中文整理自:SayBlog.Me

聲明:本站所有文章,如無特殊說明或標(biāo)注,均為本站原創(chuàng)發(fā)布。任何個(gè)人或組織,在未征得本站同意時(shí),禁止復(fù)制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。

給TA打賞
共{{data.count}}人
人已打賞
歡迎關(guān)注WordPress大學(xué)公眾號 WPDAXUE
用戶交互

WordPress 評論過濾插件:wp-itluren-comment-filter

2013-5-14 9:21:09

用戶交互

WordPress聯(lián)系表單插件:Magic Contact(側(cè)邊懸浮收縮展開)

2013-5-19 7:52:26

20 條回復(fù) A文章作者 M管理員
  1. 大顆粒番石榴

    是不是還要求主機(jī)支持什么PHP的mail()函數(shù)才行啊,我用的一個(gè)香港主機(jī)DA面板的不行,另一個(gè)美國的主機(jī)卻可以!

    • 網(wǎng)站編輯

      你要發(fā)送郵件,肯定需要服務(wù)器支持,如果支持 mail()函數(shù)就好,不支持的話,就自己想辦法通過 SMTP 方式發(fā)送也應(yīng)該可以

  2. vps要怎么設(shè)置 ?

  3. 收不到郵件

  4. 校長,用smtp發(fā)送郵件到郵箱,上面的代碼該怎么改?

  5. 按照校長源代碼復(fù)制上去的,收不到郵件呀。問了空間商,說主機(jī)支持jmail。怎么辦呀

  6. 校長,想在前端做一個(gè)簡單的調(diào)查表單,用戶勾選性別男女(和校長上面的例子多了一個(gè)勾選的按鈕,這個(gè)不會(huì)寫代碼),填寫姓名聯(lián)系方式以及備注,然后提交。接著就是后臺怎么生成一個(gè)專門的菜單,里面有每個(gè)用戶提交的表單生成的記錄。這里就是直接在后臺生成,不是發(fā)送到郵箱。這種表單功能用代碼怎么實(shí)現(xiàn)呀?求教了,望校長棒棒小弟,謝過了。

  7. 這郵件發(fā)哪去?主機(jī)後臺嗎?

    • 上面代碼的 40 行就是設(shè)置接收到郵箱,默認(rèn)為 $emailTo = get_option(‘admin_email’); 也就是管理員的郵箱,在后臺 > 設(shè)置 > 常規(guī) 填寫的郵箱地址

  8. 老大!搞好了!但是QQ郵箱老是存在垃圾箱中,也不能添加白名單。怎么辦?

  9. 老大郵箱沒有接收到怎么辦啊?

    • 首先,請確保你的主機(jī)空間支持發(fā)送郵件,其次,檢查你哪一步是不是弄錯(cuò)了

    • 網(wǎng)站編輯

      用插件是可以的啊,老大!沒有添加jQuery表單驗(yàn)證功能啊不能用嗎

    • 網(wǎng)站編輯

      老大!你的文章少了一個(gè)</form>標(biāo)簽

    • 沒少啊,99行不是有嗎

  10. 這個(gè)你試驗(yàn)沒?? 我沒找到validate jQuery plugin插件

    • validate jQuery plugin 不是WordPress插件,是jQuery插件,文章已經(jīng)有下載地址了,仔細(xì)看看

    • 網(wǎng)站編輯

      找不到啊,你說的那個(gè)下載地址是英語的 我也進(jìn)去看了,還是沒找到,方便把 jQuery validate plugin 發(fā)到我郵箱嗎?522653439@qq.com

    • 無語了,人家那個(gè)網(wǎng)站的首頁不是有下載嗎http://jqueryvalidation.org/

    • 網(wǎng)站編輯

      非常抱歉,我是點(diǎn)擊你網(wǎng)頁的鏈接進(jìn)去的 然后就在那個(gè)日志下面找 一直沒找到,不好意思 浪費(fèi)你時(shí)間了

?
個(gè)人中心
購物車
優(yōu)惠劵
今日簽到
有新私信 私信列表
搜索

松桃| 安塞县| 荣成市| 富裕县| 马边| 龙门县| 长岭县| 玉门市| 承德市| 古交市| 利津县| 寿宁县| 肥西县| 和林格尔县| 乐业县| 宜阳县| 静安区| 新巴尔虎左旗| 江西省| 安溪县| 古田县| 山阳县| 布拖县| 武陟县| 建昌县| 永昌县| 洛南县| 西乌珠穆沁旗| 新龙县| 阳东县| 福鼎市| 阜城县| 福泉市| 肇东市| 青海省| 德惠市| 岳阳县| 昌宁县| 宿松县| 和静县| 文登市|