您的位置:首页 > 编程语言

关于wordpress用户系统的几个代码小片段

2013-12-08 12:12 746 查看
一个网站的发展是不可能一个人完全包揽的下来的,小网站还好点,一旦网站到了一定规模一个人维护网站是不现实的,那样很容把身体拖垮而且一个人也不可能面面俱到,到了那个时候网站开放注册让用户来为网站生产内容是必然的,这里小V分享一些关于wordpress系统的小代码片段给大家使用。

大家都知道由于wordpress是老美生产的东西,所以对中文支持还不够完美,尤其是新用户注册时不能使用中文用户名这点最坑爹,中文网站不支持中文名这尼玛还得了啊?!那么如何让wordpress支持新用户使用中文用户名注册网站呢?实现方法很简单,将以下php代码复制到当前主题目录下的functions.php中,即可让WordPress支持使用中文用户名注册和登录,代码如下:
function v7v3_cn_login( $username, $raw_username, $strict ) {
if( !$strict )
return $username;
return sanitize_user(stripslashes($raw_username), false);
}
add_filter('sanitize_user', 'v7v3_cn_login', 10, 3);
不知道大家有没有发现这个细节,就是在wordpress网站注册新用户后,注册成功了还要重新登录,其实这样用户体验非常不好,我们可以稍微修改下让新用户在wordpress网站注册后自动登录并且转跳到指定页面,代码如下:
function v7v3_new_user( $user_id ) {
wp_set_current_user($user_id);
wp_set_auth_cookie($user_id);
// 这里设置的是跳转到首页,要换成其他页面
wp_redirect( 'http://www.v7v3.com' );
exit;
}
add_action( 'user_register', 'v7v3_new_user' );
discuz大家一定不陌生吧?国内最火的论坛建站程序,不知道大家有没有注意到discuz的用户在注册后可以用用户名或者注册邮箱(E-mail)两种方式来登录网站,而wordpress却不支持用户使用注册邮箱(E-mail)来登录网站,那么如何让wordpress支持用户使用注册邮箱(E-mail)来登录网站呢?一段代码即可搞定:
// 修改WordPress用户名过滤机制,通过Email获取用户名
function v7v3_email_login($username, $raw_username, $strict) {
if (filter_var($raw_username, FILTER_VALIDATE_EMAIL)) {
$user_data = get_user_by('email', $raw_username);
if (empty($user_data))
wp_die(__('<strong>ERROR</strong>: There is no user registered with that email address.'), '用户名不正确');
else
return $user_data->user_login;
}
else {
return $username;
}
}
// 修改登录界面的文字,"用户名"改成"用户名或邮箱"
function v7v3_change_text() {
echo '<script type="text/javascript">
var user_login_node = document.getElementById("user_login");
var old_username_text = user_login_node.parentNode.innerHTML;
user_login_node.parentNode.innerHTML = old_username_text.replace(/用户名/, "用户名或邮箱");
</script>';
}
if (in_array($GLOBALS['pagenow'], array('wp-login.php')) && strpos($_SERVER['REQUEST_URI'], '?action=register') === FALSE && strpos($_SERVER['REQUEST_URI'], '?action=lostpassword') === FALSE && strpos($_SERVER['REQUEST_URI'], '?action=rp') === FALSE ) {
add_filter('sanitize_user', 'v7v3_email_login', 10, 3);
add_action('login_footer', 'v7v3_change_text');
}
说完了登录现在来说下登出,默认的wordpress系统登出后是转跳到/wp-login.php这个登录界面下,这样的话小V个人觉得对于用户体验不是很好,那么如何让wordpress退出后转跳到指定页面呢?一段代码即可实现:
add_filter('logout_url', 'v7v3_logout_redirect', 10, 2);
function v7v3_logout_redirect($logouturl, $redir) {
$redir = 'http://www.v7v3.com/'; // 这里改成你要跳转的网址
return $logouturl . '&redirect_to=' . urlencode($redir);
}
最后再来说说如何让网站用户知道网站有文章更新呢?让用户主动去订阅网站,这个显然不是所有用户都会去做的,而且feed订阅的文章也不是实时更新的,而是每天定时抓取更新的,其实我们可以通过给用户注册时使用的邮箱发送邮件来提示用户网站有文章更新了,代码如下:
function newPostNotify($post_ID) {
if( wp_is_post_revision($post_ID) ) return;
global $wpdb;
$get_post_info = get_post($post_ID);
if ( $get_post_info->post_status == 'publish' && $_POST['original_post_status'] != 'publish' ) {
// 读数据库,获取所有用户的email
$wp_user_email = $wpdb->get_col("SELECT DISTINCT user_email FROM $wpdb->users");
// 邮件标题
$subject = 'xx博客有新文章';
// 邮件内容
$message = '文章标题:' . get_the_title($post_ID) . '<br />';
$message .= '文章网址:<a href="' . get_permalink($post_ID) . '">' . get_permalink($post_ID) . '</a><br />';
// 发邮件
$message_headers = "Content-Type: text/html; charset=\"utf-8\"\n";
wp_mail($wp_user_email, $subject, $message, $message_headers);
}
}
// 钩子,一旦WordPress有新文章发布或文章被修改即刻执行newPostNotify函数
add_action('publish_post', 'newPostNotify');
本文中所有代码都是加到functions.php文件即可。(PS:本文部分代码参考自露兜博客)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: