歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

WordPress 添加投稿功能

WordPress網站開放投稿功能,接受讀者的投稿。但WordPress本身並不提供投稿功能,只擁有強大的擴展能力,我們可以自己添加這個投稿功能。

實現用戶投稿,有兩種方法:

一種是開放後台注冊功能,普通用戶注冊進去默認設置為投稿者,登陸進去即可添加文章(默認為草稿);

另一種是在前台提供投稿表單,用戶填寫相應的表格,例如米撲博客:http://blog.mimvp.com

add-pZ喎?/kf/ware/vc/vc3RpbmctZnVuY3Rpb25hbGl0eS10by13b3JkcHJlc3MtMDI=" class="alignnone size-full wp-image-12002" height="593" src="/unixlinux/UploadFiles_9426/201703/2017030112203493.png" width="565" />

前一種方法實現起來比較簡單,基本不需要配置太多,只是有些博主可能會覺得別扭,不願讓他人看到自己的博客後台;而後一種方法對投稿者來說方便了很多,博主也不用擔心自己博客的後台隱私,只是該方法實現起來比較麻煩,需要配置的東西很多。本文只將介紹後一種方法,希望對你有所幫助,當然也只是復制粘貼代碼就可以了。

一、添加投稿表單

1、首先在當前主題目錄(/wp-content/themes/your_theme/pages/)下新建一個php文件,命名為tougao.php,並將page.php中的所有代碼復制到tougao.php中(tougao.php名稱可能在your_theme/pages/tougao.php下,也可能在your_theme/template-tougao.php);

tougao.php 代碼

<script type=src="/kindeditor/kindeditor-min.js"></script><script type=src="/kindeditor/lang/zh_CN.js"></script><script type=>$(document).ready(function(){ var editor; KindEditor.ready(function(K) { editor = K.create('textarea[name="tougao_content"]', { allowFileManager : false, allowImageUpload : false }); });});</script>
<?php
/**
 * template name: 投稿
 * website demo : http://blog.mimvp.com
 * description: template for mimvp.com
 * author : yanggang
 * date   : 2015-11-20
 */
 
if( isset($_POST['tougao_form']) && $_POST['tougao_form'] == 'mimvp_auto_post'){
    if( isset($_COOKIE["tougao"]) && ( time() - $_COOKIE["tougao"] ) < 120 ){
        wp_die('您投稿也太勤快了吧,先歇會兒!');
    }
    print_r($_POST);
    //表單變量初始化
    $authorname = isset( $_POST['tougao_authorname'] ) ? $_POST['tougao_authorname'] : '';
    $email = isset( $_POST['tougao_authoremail'] ) ? $_POST['tougao_authoremail'] : '';
    $blog = isset( $_POST['tougao_authorblog'] ) ? $_POST['tougao_authorblog'] : '';
    $title = isset( $_POST['tougao_title'] ) ? $_POST['tougao_title'] : '';
    $tags = isset( $_POST['tougao_tags'] ) ? $_POST['tougao_tags'] : '';
    $category = isset( $_POST['tougao_cat'] ) ? $_POST['tougao_cat'] : '4766';
    $postdate = isset( $_POST['tougao_date'] ) ? $_POST['tougao_date'] : date("Y-m-d H:i:s", strtotime("+8 hour"));
    $content = isset( $_POST['tougao_content'] ) ? $_POST['tougao_content'] : '';
 
    $category_list = explode(",", $category);
    //    $category_list = array("4924","1798","783","771");
 
/*
    echo $postdate;
    //表單項數據驗證
    if ( empty($authorname) || strlen($authorname) > 20 ){
        wp_die('昵稱必須填寫,且不得超過20個長度');
    }
    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('郵箱必須填寫,且不得超過60個長度,必須符合email格式');
    }
    if ( empty($title) || strlen($title) > 100 ){
        wp_die('文章標題必須填寫,且不得超過100個長度');
    }
    if ( empty($content) || strlen($content) < 100){
        wp_die('內容必須填寫,且不得少於100個長度');
    }
 */
 
    $tougao = array('post_title' => $title,
        'post_content' => $content,
        'post_status' => 'publish',
        'tags_input' => $tags,
        'post_date' => $postdate,
        // 'post_category' => array($category));
        'post_category' => $category_list);
 
    // 將文章插入數據庫
    $status = wp_insert_post( $tougao );                
    if ($status != 0){
        global $wpdb;
        $myposts = $wpdb->get_results("SELECT ID FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post' ORDER BY post_date DESC");
        add_post_meta($myposts[0]->ID, 'tcp_postauthor', $authorname);  //插入投稿人昵稱的自定義域
        if( !empty($blog))
            add_post_meta($myposts[0]->ID, 'tcp_posturl', $blog);       //插入投稿人網址的自定義域
        setcookie("tougao", time(), time()+180);
        wp_die('投稿成功!','投稿成功!');
    }else{
        wp_die('投稿失敗!','投稿失敗!');
    }
}
 
get_header();
?>
 
<?php get_sidebar(); ?>
 
<body>
<script type="text/javascript" src="<?php bloginfo('template_url'); ?>/kindeditor/kindeditor-min.js"></script>
<script type="text/javascript" src="<?php bloginfo('template_url'); ?>/kindeditor/lang/zh_CN.js"></script>
<script type="text/javascript">
$(document).ready(function(){
    var editor;
    KindEditor.ready(function(K) {
        editor = K.create('textarea[name="tougao_content"]', {
            allowFileManager : false,
                allowImageUpload : false
        });
    });
});
</script>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<?php include('top.php'); ?>
<div id="wrapper" class="clearfix">
<div id="navigation">
<div class="navigation">
<h2><a title="<?php the_title(); ?>"><?php the_title(); ?></a></h2>
</div>
<?php include("includes/notice.php"); ?>
</div>
<div class="tougao divmargin">
 
<div class="entry">
 
<form method="post" action="<?php echo $_SERVER["REQUEST_URI"]; $current_user = wp_get_current_user(); ?>">
<div id="basicinfo">
 
<table style="width: 700px; line-height: 30px; font-size: 16px;">
<tr>
<td style="width: 75px; text-align: right; padding-right: 10px;">昵稱:</td>
<td>
<input type="text" style="width: 200px;" name="tougao_authorname" value="<?php if ( 0 != $current_user->ID ) echo $current_user->user_login; ?>" />
<small>*</small>
</td>
</tr>
 
<tr>
<td style="width: 75px; text-align: right; padding-right: 10px;">E-Mail:</td>
<td>
<input type="text" style="width: 200px;" name="tougao_authoremail" value="<?php if ( 0 != $current_user->ID ) echo $current_user->user_email; ?>" />
<small>*</small>
</td>
</tr>
 
<tr>
<td style="width: 75px; text-align: right; padding-right: 10px;">您的網站:</td>
<td>
<input type="text" style="width: 200px;" name="tougao_authorblog" value="<?php if ( 0 != $current_user->ID ) echo $current_user->user_url; ?>" />
</td>
</tr>
 
<tr>
<td style="width: 75px; text-align: right; padding-right: 10px;">文章標題:</td>
<td>
<input type="text" style="width: 200px;" name="tougao_title" value="" />
<small>*</small>
</td>
</tr>
 
 
<tr>
<td style="width: 75px; text-align: right; padding-right: 10px;">關鍵字:</td>
<td>
<input type="text" style="width: 200px;" value="" name="tougao_tags" />
<small>*</small>
</td>
</tr>
 
<tr>
<td style="width: 75px; text-align: right; padding-right: 10px;">文章分類:</td>
<td>
<?php //wp_dropdown_categories('show_count=1&hierarchical=1'); ?>
<?php wp_dropdown_categories('title_li=0&hierarchical=1'); ?>
<small>*</small>
</td>
</tr>
 
</div>
 
<tr>
<td colspan="2">
文章內容:(必須)
</td>
</tr>
 
<tr>
<td colspan="2">
<div class="post-area">
<textarea rows="15" cols="60" id="tougao_content" name="tougao_content"></textarea>
</div>
</td>
</tr>
 
<tr>
<td>發布密碼:</td>
<td>
<input type="password" style="width: 200px;" value="123456" name="tougao_form" />
<small>*</small>
</td>
</tr>
 
 
<tr>
<td colspan="2">
<input id="submit" name="submit" type="submit" value="提交" />
&nbsp;&nbsp;&nbsp;
<input id="reset" name="submit" type="reset" value="重填" />
</td>
</tr>
 
</table>
 
 
</form>
 
</div>
</div>
</div>
<?php endwhile; else: ?>
<?php endif; ?>
<?php get_footer(); ?>

2、tougao.php開頭注釋/* 與 */ ,需要添加如下內容:

<?php
/**
 * template name: 投稿
 * website demo : http://blog.mimvp.com
 * description: template for mimvp.com
 * author : yanggang
 * date   : 2015-11-20
 */
 
……

上面注釋裡,必須要有 template name 模板名稱,供發布頁面時選用

 

3、最後以UTF-8編碼保存tougao.php,否則中文可能會亂碼。

4、然後進入WordPress管理後台 – 頁面 – 創建頁面,標題為投稿,內容填上投稿說明等,右下側選擇模板 投稿(template name 模板名稱為“投稿”)。

add-posting-functionality-to-wordpress-03

此頁面即自定義的前台注冊頁面,將該頁面的鏈接放到網站任何位置,供用戶點擊注冊即可,示例為米撲博客:http://blog.mimvp.com

add-posting-functionality-to-wordpress-02

好了,投稿的基本功能已經添加完畢,至於表單樣式不好看,表單缺少你想要的項目等問題,你就自己添加css、表單項吧。最後,也歡迎給米撲博客投稿,當然本站也支持第一種注冊投稿功能,秉持開放自由的態度。

 

代碼補充說明

1、如果你想讓投稿的文章立即發布,而不需要審核再編輯,那麼請將以上代碼66行改成:

‘post_content’ => $post_content, ‘post_status’ => ‘publish’,

2、如果你想讓用戶在投稿的同時,將投稿者注冊成你本站的投稿者,並將文章的作者歸到這個投稿者的名下,你可以參考上面的投稿代碼tougao.php

3、如果你的博客文章都有自定義欄目,並且想在用戶投稿的同時添加自定義欄目,參考上面的投稿代碼tougao.php

4、如果你覺得本文提供的文章編輯框太過單調,需要一個富文本編輯,你可以看看這篇文章(包含圖片上傳功能):WordPress投稿功能添加富文本編輯器

5、如果你使用了一些富文本編輯器,文章提交後內容中的代碼都被轉義了,參考上面的投稿代碼tougao.php

6、如果你需要投稿的文章發布後通知投稿者,可以看看這篇文章(前提投稿的文章默認是草稿狀態,而不是直接發布):WordPress投稿功能添加郵件提醒功能

7、如果你想給投稿頁面增加驗證碼功能,可以 點此下載 驗證碼文件,解壓後將captcha目錄放到當前主題目錄下,然後在代碼一中,將35行的:


改成:

<div style="text-align: left; padding-top: 10px;">
  <label for="CAPTCHA">驗證碼:
    <input id="CAPTCHA" style="width:110px;*float:left;" class="input" type="text" tabindex="24" size="10" value="" name="captcha_code" /> 看不清?<a href="javascript:void(0)" onclick="document.getElementById('captcha_img').src='<?php bloginfo('template_url'); ?>/captcha/captcha.php?'+Math.random();document.getElementById('CAPTCHA').focus();return false;">點擊更換</a>
  </label>
</div>
     
<div style="text-align: left; padding-top: 10px;">
  <label>
    <img id="captcha_img" src="<?php bloginfo('template_url'); ?>/captcha/captcha.php" />
  </label>
</div>
            
<br clear="all">

將代碼二中的:

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('驗證碼不正確!<a href="'.$current_url.'">點此返回</a>');
  }

大功造成!

 

禁止WordPress自動加br標簽的方法

每當WordPress添加html代碼時候WordPress都會進行格式檢查自動在後面加入br標簽或p標簽導致代碼出現錯誤,打開WordPress程序中的 wp-includes/formatting.php,查找

function wpautop($pee, $br = true)

將他改為:

function wpautop($pee, $br = false)

就可以禁止wordpress自動加br或p標簽了。

add-posting-functionality-to-wordpress-04

修改後,不換行的效果,請見米撲代理:

米撲代理2.0發布,集成支付功能

 

Copyright © Linux教程網 All Rights Reserved