問題描述
I am developing a free plugin 用於將外部支援系統連線到 WordPress,以便能夠對 WordPress 上的使用者進行身份驗證。
為此,目前來自外部系統的使用者最終將傳送到 WordPress 的登入頁面
?action=freshdesk-remote-login
我的外掛然後檢查使用者是否登入到 WP,如果沒有顯示登入表單和成功登入後重定向到第三方站點。
重定向是透過以下方式完成的:wp_redirect( $sso_url );
現在這樣做很好,但我打算提供一個可以新增到使用者選擇的頁面的短碼。現在一旦使用者訪問此頁面,如果他們登入,他們應該被轉發到第三方網站,否則轉發到登入頁面。
有沒有辦法你可以建議 wp_redirect 在一個短碼中工作?
最佳解決方案
正如 @Rarst 所解釋的那樣,簡訊通常執行得太晚,無法從內部重定向。他們通常執行在 the_content
鉤子,這是內容傳送到瀏覽器後很好。如果您需要根據短碼的存在進行重定向,則在任何內容離開伺服器之前,您需要檢查該短碼。
function pre_process_shortcode() {
if (!is_singular()) return;
global $post;
if (!empty($post->post_content)) {
$regex = get_shortcode_regex();
preg_match_all('/'.$regex.'/',$post->post_content,$matches);
if (!empty($matches[2]) && in_array('yourshortcodeslug',$matches[2]) && is_user_logged_in()) {
// redirect to third party site
} else {
// login form or redirect to login page
}
}
}
add_action('template_redirect','pre_process_shortcode',1);
這就是 「概念證明」 。您需要的特定條件可能會有所不同。請注意,這是一個漂亮的”heavy” 位處理。我會確保它只執行在絕對必要的地方。
次佳解決方案
wp_redirect()
透過 HTTP 頭執行重定向,因此在技術上它不會 (或至少不應該) 在頁面輸出開始之後工作。所以你不能在短碼中使用這個功能。
這並不意味著你不能使用短碼來控制它。在輸出開始 (template_redirect
鉤子附近的地方) 之前,您可以檢查適合條件 (頁面和頁面是否包含短碼),然後執行重定向。
另一個選項是有條件地輸出將在頁面載入後執行重定向的 JavaScript 。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。