0°

WordPress添加投稿功能

很多网站都想开放读者的投稿功能,接受读者的投稿,不仅可以丰富博客的内容,还可以增加与读者之间的沟通,可以说是一举多得的事情,何乐不为呢?WordPress本身并不提供投稿功能,但是WordPress拥有强大的扩展能力,我们可以自己来添加这个功能。
实现用户投稿,有两种方法,一种是开放后台的注册功能,普通用户注册进去默认设置为投稿者,登陆进去即可添加文章(默认为草稿);另一种方法是在前台提供投稿表单,用户填写相应的表格即可。前一种方法实现起来比较简单,基本不需要博主配置太多东西,只是有些博主可能会觉得别扭,不愿让他人看到自己的博客后台;而后一种方法对投稿者来说方便了很多,博主也不用担心自己博客的后台隐私,只是该方法实现起来比较麻烦,需要配置的东西很多。本文也只将介绍后一种方法,希望对你有所帮助,当然也只是复制粘贴代码就可以了。

一、添加投稿表单

1、首先在当前主题的目录下新建一个php文件,命名为tougao-page.php,然后将page.php中的所有代码复制到tougao-page.php中;
2、删除tougao-page.php开头的所有注释,即 /* 与 */ ,以及它们之间的所有内容;
3、搜索:the_content,可以查找到类似代码<?php the_content(); ?>,将其替换成代码一如果你在tougao-page.php中找不到the_content
,那么你可以查找:get_template_part,可找到类似代码:<?php get_template_part( ‘content’, ‘page’ ); ?<>>,将content-page.php中的所有代码替换这部分代码即可。再用下面的代码替换<?php the_content(); ?>
代码一:




">

二、添加表单处理代码

在tougao-page.php开头处中,将第一个 <?php 改成代码二


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)) < 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;
    $content =  isset( $_POST['tougao_content'] ) ? trim(htmlspecialchars($_POST['tougao_content'], ENT_QUOTES)) : '';
    
    // 表单项数据验证
    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.'
Email: '.$email.'
blog: '.$blog.'
内容:
'.$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('投稿成功!感谢投稿!点此返回', '投稿成功'); } else { wp_die('投稿失败!点此返回'); } }

最后以UTF-8编码保存tougao-page.php,否则中文可能会乱码。然后进入WordPress管理后台 – 页面 – 创建页面,标题为投稿(可以自己起名),内容填上投稿说明等,右侧可以选择模板,选择 tougao 即可。此页面即前台注册页面,将该页面的链接放到网站任何位置,供用户点击注册即可。

好了,基本的投稿功能已经添加完毕,至于表单样式不好看,表单缺少你想要的项目等问题,你就自己添加css、表单项吧。最后,也欢迎给本站投稿哦。

代码补充说明

1,如果你想让用户在投稿的同时,将投稿者注册成你本站的投稿者,并将文章的作者归到这个投稿者的名下,你可以参考此条回复的内容修改相应的代码:
将第二段代码中的:


// 将文章插入数据库
$status = wp_insert_post( $tougao );

改成:


require_once(ABSPATH . WPINC . '/registration.php');

$user_id = username_exists( $name );

if($user_id == NULL) {
    if(mb_strlen($name,"utf-8") != strlen($name) || email_exists($email))
        wp_die('用户名含有非英文字符,或者Email已被注册!');

    $password = '123456'; // 默认的用户密码,自行更改
    $user_id = wp_create_user( $name, $password, $email );

    // 更新用户的网站和角色,角色默认为投稿者contributor,
    // 角色可改成订阅者:subscriber,作者:author
    wp_update_user( array ('ID' => $user_id, 'user_url' => $blog, 'role' => 'contributor' ) ) ;
}

// 如果用户名已存在,则不添加用户,文章归到管理员名下

// 建立文章与作者关系
$tougao['post_author'] = $user_id;

// 将文章插入数据库
$status = wp_insert_post( $tougao );

2,如果你觉得本文提供的文章编辑框太过单调,需要一个富文本编辑,你可以看看这篇文章(包含图片上传功能):
WordPress投稿功能添加富文本编辑器
3,如果你需要投稿的文章发布后通知投稿者,可以看看这篇文章(前提投稿的文章默认是草稿状态,而不是直接发布):
打开WordPress添加投稿功能,下面我们将对这篇文章中的代码进行修改。在第二段代码以下代码:


wp_mail("somebody#example.com","My subject","content");

的下一行插入以下代码:


// 其中 ludou_tougao_email 是自定义栏目的名称
add_post_meta($status, 'ludou_tougao_email', $email, TRUE);

添加提醒功能php代码

在主题目录下的functions.php添加以下php代码(将以下代码中的露兜博客名称和URL改成你自己的):


function tougao_notify($mypost) {
$email = get_post_meta($mypost->ID, "ludou_tougao_email", true);

if( !empty($email) ) {
// 以下是邮件标题
$subject = '您在露兜博客的投稿已发布';
// 以下是邮件内容
$message = '

露兜博客 提醒您: 您投递的文章 ' . $mypost->post_title . ' 已发布

您可以点击以下链接查看具体内容:
点此查看完整內容

===================================================================

感谢您对 露兜博客 的关注和支持

该信件由系统自动发出, 请勿回复, 谢谢.

';

add_filter('wp_mail_content_type',create_function('', 'return "text/html";'));
@wp_mail( $email, $subject, $message );
}
}

// 当投稿的文章从草稿状态变更到已发布时,给投稿者发提醒邮件
add_action('draft_to_publish', 'tougao_notify', 6);

以上功能需要你的服务器支持mail函数

 

© 除特别注明外,本站所有文章均为 信息库博客 原创,转载请注明出处来自 https://www.xxko.net/wordpress-add-contribute-page.html
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
4 条回复 A 作者 M 管理员
  1. 请问,tougao-page.php文件放在哪里?谢谢。

    • page文件同级,一般放主题根目录就好

    • 感谢博主的热心解答。按照您的教程,tougao-page.php模板已经修改上传主题根目录。但是,在建立新页面时,右侧无法找到创建的tougao-page.php模板文件。不知道是啥原因?谢谢。

    • 文章源自露兜博客,教程肯定没问题,要么就是你姿势不对,请查看原文获取更多帮助[em_4]

欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论