WordPress在线投稿

现在很多优秀的博客都会支持在线投稿,你可以将优秀的文章发表到别人的网站,以此来推广自己的博客。话说,我这个在线投稿表单,虽然有人投过,不过大部分人都是抱着捣乱的心态来试试的,所以至今没有一篇投稿成功的文章,这也算是本博客的一个失败之处吧。

如果你需要更加复杂的功能,可以使用Wordpress最著名的表单插件contact7插件,这个插件支持你自定义各种元素和验证等。

<?php
//Code From qdkfweb.cn
if( isset($_POST['tougao_form']) && $_POST['tougao_form'] == 'send')
{
global $wpdb;
$last_post = $wpdb->get_var("SELECT post_date FROM $wpdb->posts WHERE post_type = 'post' ORDER BY post_date DESC LIMIT 1");

// 博客当前最新文章发布时间与要投稿的文章至少间隔120秒。
// 可自行修改时间间隔,修改下面代码中的120即可
// 相比Cookie来验证两次投稿的时间差,读数据库的方式更加安全
if ( current_time('timestamp') - strtotime($last_post) < 120 )
{
wp_die('您投稿也太勤快了吧,先歇会儿!');
}

// 表单变量初始化
$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;
$tags = isset( $_POST['tougao_tags'] ) ? $_POST['tougao_tags'] : '';
$content = isset( $_POST['tougao_content'] ) ? $_POST['tougao_content'] : '';

// 表单项数据验证
if ( empty($name) || mb_strlen($name) > 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('Email必须填写,且长度不得超过60字,必须符合Email格式');
}

if ( empty($title) || mb_strlen($title) > 100 )
{
wp_die('标题必须填写,且长度不得超过100字');
}

if ( empty($content) || mb_strlen($content) > 3000 || mb_strlen($content) < 100)
{
wp_die('内容必须填写,且长度不得超过3000字,不得少于100字');
}

$post_content = '昵称: '.$name.'<br />Email: '.$email.'<br />blog: '.$blog.'<br />内容:<br />'.$content;

$tougao = array(
'post_title' => $title,
'post_content' => $post_content,
'tags_input' => $tags,
'post_category' => array($category)
);

// 将文章插入数据库
$status = wp_insert_post( $tougao );
//设置博主接收邮件的邮箱
$admin_email = get_option('h_admin_email');
if ($status != 0)
{
// 投稿成功给博主发送邮件
// somebody#example.com替换博主邮箱
// My subject替换为邮件标题,content替换为邮件内容
wp_mail($admin_email,"有人给你的博客投稿啦!赶紧审核吧!!","有人给你的博客投稿啦!赶紧审核吧!!");

wp_die('投稿成功!您的文章将在审核通过后发布!','投稿成功!');
}
else
{
wp_die('投稿失败!');
}
}
?>
<?php get_header(); ?>
<div class="contents post">

<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
<article class="entry">
<h1 class="entry-title"><?php the_title(); ?></h1>
<div id="tougao-page">
<?php the_content(); ?>

<!-- 关于表单样式,请自行调整-->
<form method="post" action="<?php echo $_SERVER["REQUEST_URI"]; ?>">
<div class="tougao-d">
<input type="text" size="40" value="" id="tougao_authorname" name="tougao_authorname" />
<label for="tougao_authorname">昵称(必填)</label>
</div>

<div class="tougao-d">
<input type="text" size="40" value="" id="tougao_authoremail" name="tougao_authoremail" />
<label for="tougao_authoremail">邮箱(必填)</label>
</div>

<div class="tougao-d">
<input type="text" size="40" value="" id="tougao_authorblog" name="tougao_authorblog" />
<label for="tougao_authorblog">您的博客/文章来源</label>
</div>

<div class="tougao-d">
<input type="text" size="40" value="" id="tougao_title" name="tougao_title" />
<label for="tougao_title">文章标题(必填)</label>
</div>

<div class="tougao-d">
<input id="tags" type="text" size="40" value="" name="tougao_tags" /><label for="tougao_tags"> 文章标签(多个标签请用英文逗号 , 分开)</label>
</div>

<div class="tougao-d">
<?php wp_dropdown_categories('show_option_none=请选择文章分类&id=tougao-cat&show_count=1&hierarchical=1&hide_empty=0'); ?>
<label for="tougaocategorg">请选择文章分类(必选)</label>
</div>

<div class="tougao-d">
<textarea rows="15" cols="55" id="tougao_content" name="tougao_content" ></textarea>
</div>

<br clear="all">
<p>
<input type="hidden" value="send" name="tougao_form" />
<input id="submit" type="submit" value="提交" />
<input id="reset" type="reset" value="重填" />
</p>
</form>
</div>
</article>
<?php endwhile; ?>
</div>

关注我

我的微信公众号:前端开发博客,在后台回复以下关键字可以获取资源。

  • 回复「小抄」,领取Vue、JavaScript 和 WebComponent 小抄 PDF
  • 回复「Vue脑图」获取 Vue 相关脑图
  • 回复「思维图」获取 JavaScript 相关思维图
  • 回复「简历」获取简历制作建议
  • 回复「简历模板」获取精选的简历模板
  • 回复「加群」进入500人前端精英群
  • 回复「电子书」下载我整理的大量前端资源,含面试、Vue实战项目、CSS和JavaScript电子书等。
  • 回复「知识点」下载高清JavaScript知识点图谱

每日分享有用的前端开发知识,加我微信:caibaojian89 交流