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