最近做到一個難度略高的案子,關於要整個幾乎客製八成以上的功能,差不多快把 WordPress 拆了那種程度,在幾近完成階段時,業主給了一個很奇怪的要求,就是它們希望 WooCommerce 的登入頁面要跟 WordPress 登入的頁面要一樣。乍聽之下沒有什麼問題,但仔細一看你會發現問題不小,而且有點靠北,因為你可以透過 LoginPress 來完成客製,但內行的都知道 WooCommerce 的登入其實是獨立的,可是兩邊又是相通的這樣。
問題出現在你點「會員中心/我的帳號」也就是 my-account 這一頁,會先偵測你的登入狀況,如果你是從設計者提供的登入位置登入再點這一頁,看起來完全沒有問題,但是你若沒有登入直接點「會員中心/我的帳號」,你會發現他會強制帶你到一個 WooCommerce 預設的登入頁面,很陽春很醜,沒客製根本看起來超不專業的;網路上很多關於客製化登入頁面的外掛 Plugins 在販售著,如果不會改就只能乖乖花錢買外掛套用修改,後來我找到了一個方式可以完全不用外掛,只要把 CODE 插入之後,修改一些小地方就可以了。
function redirect_login_page(){
if(is_user_logged_in()){
return;
}
global $post;
if( has_shortcode($post->post_content, "woocommerce_my_account") ) {
wp_redirect( '/wp-login.php' );
exit();
}
}
add_action( 'template_redirect','redirect_login_page' );
上面的 CODE 意思是,先偵測登入狀況,接著 wp_redirect( ‘/wp-login.php’ ); 這串的 /wp-login.php 就是改成你要指向的網址就好了,你也可以用 /?p=xxx 這種頁面 ID 去達成你要指向的客製化登入頁面喔!這個是我用 LoginPress 的範例,你可以改成你要指向的頁面 ID。
add_action('wp_logout','my_redirect_after_logout');
function my_redirect_after_logout(){
wp_redirect( '/?p=xxx' );
exit();
}
上面這串是設定當使用者按下登出(無論是在我的帳號、會員中心)要強制指向的位置,/?p=xxx 的 xxx 就是你要指向的頁面,當然你也可以指向一個網址。