很多網站都想開放讀者的投稿功能,接受讀者的投稿,不僅可以豐富博客的內容,還可以增加與讀者之間的溝通,可以說是一舉多得的事情,何樂不為呢?WordPress本身并不提供投稿功能,但是WordPress擁有強大的擴展能力,我們可以自己來添加這個功能。
實現用戶投稿,有兩種方法,一種是開放后臺的注冊功能,普通用戶注冊進去默認設置為投稿者,登陸進去即可添加文章(默認為草稿);另一種方法是在前臺提供投稿表單,用戶填寫相應的表格即可。前一種方法實現起來比較簡單,基本不需要博主配置太多東西,只是有些博主可能會覺得別扭,不愿讓他人看到自己的博客后臺;而后一種方法對投稿者來說方便了很多,博主也不用擔心自己博客的后臺隱私,只是該方法實現起來比較麻煩,需要配置的東西很多。本文也只將介紹后一種方法,希望對你有所幫助,當然也只是復制粘貼代碼就可以了。
一、添加投稿表單
1、首先在當前主題的目錄下新建一個php文件,命名為tougao-page.php,然后將page.php中的所有代碼復制到tougao-page.php中;
2、刪除tougao-page.php開頭的所有注釋,即 /* 與 */ ,以及它們之間的所有內容;
3、搜索:the_content,可以查找到類似代碼,將其替換成代碼一
如果你在tougao-page.php中找不到the_content,那么你可以查找:get_template_part,可找到類似代碼:,將content-page.php中的所有代碼替換這部分代碼即可。再用下面的代碼替換
代碼一:
<?php the_content(); ?><!-- 關于表單樣式,請自行調整-->
二、添加表單處理代碼
在tougao-page.php開頭處中,將第一個
<?php /** * Template Name: tougao * 作者:露兜 * 博客:https://www.ludou.org/ * * 更新記錄 * 2010年09月09日 : * 首個版本發布 * * 2011年03月17日 : * 修正時間戳函數,使用wp函數current_time('timestamp')替代time() * * 2011年04月12日 : * 修改了wp_die函數調用,使用合適的頁面title * * 2013年01月30日 : * 錯誤提示,增加點此返回鏈接 * * 2013年07月24日 : * 去除了post type的限制;已登錄用戶投稿不用填寫昵稱、email和博客地址 * * 2015年03月08日 : * 使用date_i18n('U')代替current_time('timestamp') */ if( isset($_POST['tougao_form']) && $_POST['tougao_form'] == 'send') { global $wpdb; $current_url = 'http://你的投稿頁面地址'; // 注意修改此處的鏈接地址 $last_post = $wpdb->get_var("SELECT?`post_date`?FROM?`$wpdb->posts`?ORDER?BY?`post_date`?DESC?LIMIT?1"); ????//?博客當前最新文章發布時間與要投稿的文章至少間隔120秒。 ????//?可自行修改時間間隔,修改下面代碼中的120即可 ????//?相比Cookie來驗證兩次投稿的時間差,讀數據庫的方式更加安全 ????if?(?(date_i18n('U')?-?strtotime($last_post))?點此返回'); ????} ???????? ????//?表單變量初始化 ????$name?=?isset(?$_POST['tougao_authorname']?)???trim(htmlspecialchars($_POST['tougao_authorname'],?ENT_QUOTES))?:?''; ????$email?=??isset(?$_POST['tougao_authoremail']?)???trim(htmlspecialchars($_POST['tougao_authoremail'],?ENT_QUOTES))?:?''; ????$blog?=??isset(?$_POST['tougao_authorblog']?)???trim(htmlspecialchars($_POST['tougao_authorblog'],?ENT_QUOTES))?:?''; ????$title?=??isset(?$_POST['tougao_title']?)???trim(htmlspecialchars($_POST['tougao_title'],?ENT_QUOTES))?:?''; ????$category?=??isset(?$_POST['cat']?)???(int)$_POST['cat']?:?0; ????$content?=??isset(?$_POST['tougao_content']?)???trim(htmlspecialchars($_POST['tougao_content'],?ENT_QUOTES))?:?''; ???? ????//?表單項數據驗證 ????if?(?empty($name)?||?mb_strlen($name)?>?20?)?{ ????????wp_die('昵稱必須填寫,且長度不得超過20字。<a>點此返回</a>'); ????} ???? ????if?(?empty($email)?||?strlen($email)?>?60?||?!preg_match("/^([a-z0-9+_-]+)(.[a-z0-9+_-]+)*@([a-z0-9-]+.)+[a-z]{2,6}$/ix",?$email))?{ ????????wp_die('Email必須填寫,且長度不得超過60字,必須符合Email格式。<a>點此返回</a>'); ????} ???? ????if?(?empty($title)?||?mb_strlen($title)?>?100?)?{ ????????wp_die('標題必須填寫,且長度不得超過100字。<a>點此返回</a>'); ????} ???? ????if?(?empty($content)?||?mb_strlen($content)?>?3000?||?mb_strlen($content)?點此返回'); ????} ???? ????$post_content?=?'昵稱:?'.$name.'<br>Email:?'.$email.'<br>blog:?'.$blog.'<br>內容:<br>'.$content; ???? ????$tougao?=?array( ????????'post_title'?=>?$title,? ????????'post_content'?=>?$post_content, ????????'post_category'?=>?array($category) ????); ????//?將文章插入數據庫 ????$status?=?wp_insert_post(?$tougao?); ?? ????if?($status?!=?0)?{? ????????//?投稿成功給博主發送郵件 ????????//?somebody#example.com替換博主郵箱 ????????//?My?subject替換為郵件標題,content替換為郵件內容 ????????wp_mail("somebody#example.com","My?subject","content"); ????????wp_die('投稿成功!感謝投稿!<a>點此返回</a>',?'投稿成功'); ????} ????else?{ ????????wp_die('投稿失敗!<a>點此返回</a>'); ????} }
最后以UTF-8編碼保存tougao-page.php,否則中文可能會亂碼。然后進入WordPress管理后臺 – 頁面 – 創建頁面,標題為投稿(可以自己起名),內容填上投稿說明等,右側可以選擇模板,選擇 tougao 即可。此頁面即前臺注冊頁面,將該頁面的鏈接放到網站任何位置,供用戶點擊注冊即可。
好了,基本的投稿功能已經添加完畢,至于表單樣式不好看,表單缺少你想要的項目等問題,你就自己添加css、表單項吧。最后,也歡迎給本站投稿哦,當然本站的投稿方式是開放后臺的注冊功能,不是以上的表單形式。
代碼補充說明
1、如果你想讓投稿的文章立即發布,而不需要審核再編輯,那么請將以上代碼中的:
'post_content'?=>?$post_content,
改成:
'post_content'?=>?$post_content,'post_status'?=>?'publish',
2、如果你想讓用戶在投稿的同時,將投稿者注冊成你本站的投稿者,并將文章的作者歸到這個投稿者的名下,你可以參考此條回復的內容修改相應的代碼:給本站投稿。
3、如果你的博客文章都有自定義欄目,并且想在用戶投稿的同時添加自定義欄目,可以參考這條回復:給本站投稿。
4、如果你覺得本文提供的文章編輯框太過單調,需要一個富文本編輯,你可以看看這篇文章(包含圖片上傳功能):給本站投稿
5、如果你使用了一些富文本編輯器,文章提交后內容中的代碼都被轉義了,可以參考這條回復:給本站投稿。
6、如果你需要投稿的文章發布后通知投稿者,可以看看這篇文章(前提投稿的文章默認是草稿狀態,而不是直接發布):給本站投稿
7、如果你想給投稿頁面增加驗證碼功能,可以 給本站投稿 驗證碼文件,解壓后將captcha目錄放到當前主題目錄下,然后在代碼一中,將35行的:
<br>
改成:
??????驗證碼: ?????看不清?/captcha/captcha.php?'+Math.random();document.getElementById('CAPTCHA').focus();return?false;">點擊更換 ?? ????????????? <br>????@@##@@/captcha/captcha.php"?/> ??
將代碼二中的:
if(?isset($_POST['tougao_form'])?&&?$_POST['tougao_form']?==?'send')?{
改成:
if?(!isset($_SESSION))?{ ?session_start(); session_regenerate_id(TRUE); } ? if(?isset($_POST['tougao_form'])?&&?$_POST['tougao_form']?==?'send')?{ ??if(empty($_POST['captcha_code']) ????||?empty($_SESSION['ludou_lcr_secretword']) ????||?(trim(strtolower($_POST['captcha_code']))?!=?$_SESSION['ludou_lcr_secretword']) ??)?{ ????wp_die('驗證碼不正確!點此返回'); ??}
大功造成!
推薦學習:《給本站投稿》