wordpress 自定義路由及展示頁
背景:
我想實現一個特殊的響應,流程如下:訪問domain/test,響應一個表單頁面,填寫並提交表單頁面後,wordpress進行響應(wordpress處理ajax請求)。
key point 1、怎麼註冊domain/test這個路由(add_rewrite_rule())?
key point 2、怎麼響應domain/test這個請求(template_redirect)?
實現過程:
首先,wordpress 有重寫url的方法,叫 add_rewrite_rule()。在function.php中加入如下程式碼段:
// 新增路由重寫,每次修改完記得在wp-admin後臺“設定”-》“固定連結”=》“儲存”才能生效
add_action('init', 'theme_functionality_urls');
function theme_functionality_urls() {
add_rewrite_rule('^test','index.php?test=1','top');
}
這段程式碼的意思就是把domain?test=1改寫成domain/test,top意思是把這個規則放到最前面。
此時,當你訪問domain/test跟訪問domain?test=1的效果是一樣的。
但是,我們原本也沒有對domain?test=1這樣的請求進行響應。所以1、當請求domain?test=1的時候,我們怎麼獲取到這個test的值?2、怎麼對這個請求進行響應?
add_action('query_vars', 'test_add_query_vars');
function test_add_query_vars($public_query_vars){
$public_query_vars[] = 'test';
return $public_query_vars;
}
這段程式碼的意思是在執行到query_vars這個鉤子的時候,給$public_query_vars陣列裡面新增一個test欄位,這個test欄位就是當訪問domain?test=1的時候的test的欄位。當新增test到$public_query_vars之後,會檢查每個請求url裡是否包含test欄位。
//模板載入規則
add_action("template_redirect", 'test_template_redirect');
function test_template_redirect(){
global $wp;
global $wp_query;
$reditect_page = $wp_query->query_vars['test'];
if ($reditect_page == "1"){
include(TEMPLATEPATH.'/test/test.php');
die();
}
}
這段程式碼的意思是這樣的,首先,這個TEMPLATEPATH是你的主題路徑,連著/test/test.php相當於在你的主題目錄下新建了一個test目錄,test目錄裡有一個test.php檔案。
所有的請求都會走這個方法,但是,唯獨請求url中包含test欄位並且test的值為1的時候會轉至我們新建的/test/test.php頁面。然後die()掉。
至此,當我們訪問domain/test的時候,相當於在訪問domain?test=1這個url,並且會把我們自定義的template展示出來。
我在這個test.php中寫了一個表單,通過ajax請求打到wordpress後臺進行處理,具體可以參考《wordpress處理ajax請求》。
參考:
http://www.ashuwp.com/courses/highgrade/318.html
https://www.iteblog.com/archives/1988.html
相關文章
- WordPress主題製作進階#10自定義主頁
- wordpress 生成自定義 meta box
- wordpress 自定義登入表單
- WPF自定義路由事件路由事件
- zuul 自定義路由規則Zuul路由
- WordPress開發入門08:自定義函式和WordPress鉤子函式
- 自定義分頁格式
- WordPress新增自定義sidebar側邊欄功能IDE
- 用WP_Query自定義WordPress主迴圈
- Flutter 建立自定義路由過渡動畫Flutter路由動畫
- Django(6)自定義路由轉換器Django路由
- vue router路由自定義後退事件Vue路由事件
- 在.NET 6.0中自定義介面路由路由
- 在vue中展示自定義列名的甘特圖Vue
- GridView 自定義模版自定義修改,刪除,分頁View
- XAF自定義啟動頁
- JavaWeb 自定義404頁面JavaWeb
- 安卓開發之ViewDragHelper的使用及自定義可下拉展示內容的ViewGroup安卓View
- 微信小程式動態評分展示/五角星展示/半顆星展示/自定義長度展示微信小程式
- Laravel重寫資源路由自定義URLLaravel路由
- PHP中的自定義路由使用小結PHP路由
- 一文說透WordPress的自定義文章型別型別
- 如何自定義Safari的起始頁
- 自定義OAM錯誤頁面
- Swift - 自定義Share分享頁面Swift
- 自定義分頁控制元件控制元件
- SAP 電商雲 Spartacus UI 產品明細頁面路由路徑的自定義配置UI路由
- 案例展示自定義C函式的實現過程函式
- 22個展示華麗的極簡主義網頁網頁
- Flutter利用註解生成可自定義的路由Flutter路由
- Laravel-Admin Form 元件 自定義提交路由LaravelORM元件路由
- Azure 使用者自定義路由 (User Defined Route)路由
- 線上debug&gateway自定義路由規則Gateway路由
- Custom Post Types [2.1.14] - WordPress高階自定義外掛
- WordPress自定義欄位獲取get_post_meta函式函式
- WordPress開發入門07:WP_Query 自定義迴圈
- 教你自定義Flutter錯誤頁面Flutter
- 前端頁面自定義滾動條前端