一個網站的發展是不可能一個人完全包攬的下來的,小網站還好點,一旦網站到了一定規模一個人維護網站是不現實的,那樣很容把身體拖垮而且一個人也不可能面面俱到,到了那個時候網站開放註冊讓用户來為網站生產內容是必然的,這裏小編分享一些關於 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:本文部分代碼參考自露兜博客)