一个网站的发展是不可能一个人完全包揽的下来的,小网站还好点,一旦网站到了一定规模一个人维护网站是不现实的,那样很容把身体拖垮而且一个人也不可能面面俱到,到了那个时候网站开放注册让用户来为网站生产内容是必然的,这里小编分享一些关于 WordPress 系统的小代码片段给大家使用。
大家都知道由于 WordPress 是老美生产的东西,所以对中文支持还不够完美,尤其是新用户注册时不能使用中文用户名这点最坑爹,中文网站不支持中文名这尼玛还得了啊?!那么如何让 WordPress 支持新用户使用中文用户名注册网站呢?实现方法很简单,将以下 php 代码复制到当前主题目录下的 functions.php 中,即可让 WordPress 支持使用中文用户名注册和登录,代码如下:
function wxd_cn_login( $username, $raw_username, $strict ) { if( !$strict ) return $username; return sanitize_user(stripslashes($raw_username), false); } add_filter('sanitize_user', 'wxd_cn_login', 10, 3);
不知道大家有没有发现这个细节,就是在 WordPress 网站注册新用户后,注册成功了还要重新登录,其实这样用户体验非常不好,我们可以稍微修改下让新用户在 WordPress 网站注册后自动登录并且转跳到指定页面,代码如下:
function wxd_new_user( $user_id ) { wp_set_current_user($user_id); wp_set_auth_cookie($user_id); // 这里设置的是跳转到首页,要换成其他页面 wp_redirect( 'http://www.weixiaoduo.com' ); exit; } add_action( 'user_register', 'wxd_new_user' );
discuz 大家一定不陌生吧?国内最火的论坛建站程序,不知道大家有没有注意到 discuz 的用户在注册后可以用用户名或者注册邮箱 (E-mail) 两种方式来登录网站,而 WordPress 却不支持用户使用注册邮箱 (E-mail) 来登录网站,那么如何让 WordPress 支持用户使用注册邮箱 (E-mail) 来登录网站呢?一段代码即可搞定:
// 修改 WordPress 用户名过滤机制,通过 Email 获取用户名 function wxd_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 wxd_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', 'wxd_email_login', 10, 3); add_action('login_footer', 'wxd_change_text'); }
说完了登录现在来说下登出,默认的 WordPress 系统登出后是转跳到/wp-login.php 这个登录界面下,这样的话小编个人觉得对于用户体验不是很好,那么如何让 WordPress 退出后转跳到指定页面呢?一段代码即可实现:
add_filter('logout_url', 'wxd_logout_redirect', 10, 2); function wxd_logout_redirect($logouturl, $redir) { $redir = 'https://www.weixiaoduo.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="'%20.%20get_permalink($post_ID)%20.%20'">'%20.%20get_permalink($post_ID)%20.%20'</a><br />'; // 发邮件 $message_headers = "Content-Type: text/html; charset="utf-8" "; wp_mail($wp_user_email, $subject, $message, $message_headers); } } // 钩子,一旦 WordPress 有新文章发布或文章被修改即刻执行 newPostNotify 函数 add_action('publish_post', 'newPostNotify');
本文中所有代码都是加到 functions.php 文件即可。 (PS:本文部分代码参考自露兜博客)