2016-08-11 11 views
2

WordPressベースのWebサイトにカスタムURL構造を追加しようとしています。例えばWordPressカスタムURLを関数にマップする

example.com/machines    //list all machines in a table 

example.com/machines?some=params //list filtered machines in a table 

example.com/machines/1   //show single machine 

データは、カールを経て、私はすでに開発している外部APIから来ます。

多くのテーブルで正規化されているので、データをカスタムの投稿タイプにインポートすることはできません。ビジネスロジックは複雑で、他のデバイスでもAPIを使用しています。

私はadd_rewrite_ruleのためのドキュメントを見てきましたが、2番目のパラメータは、私は困惑していますように動作します

$redirect 
(string) (required) The URL you would like to actually fetch 

をまあ、私はフェッチするURLを持っていない、私は機能を実行したいです、シンプルなルータ - URLの部分を取り、外部APIを呼び出して、正しいデータを持つテンプレートを返します。

APIを呼び出すのは簡単ですが、実際にURLを関数にルーティングする方法と、テンプレートを読み込む方法(既存のWordPress header.phpとfooter.phpを利用する方法)があります。

答えて

2

グーグルでグーグルを読んで少ししか読んだら、goodresourcesを読んだところ、解決策が見つかりました。

第一ステップは、クエリ変数にマッピングされるベースURLの作成にadd_rewrite_endpointを使用することです:書き換えルールをフラッシュするパーマリンクページを訪問した後

add_action('init', function(){ 
    add_rewrite_endpoint('machines', EP_ROOT); 
}); 

を、次のステップはにフックすることです

add_action('template_redirect', function(){ 
    if($machinesUrl = get_query_var('machines')){ 
     //var_dump($machinesUrl, $_GET); 
     //$machinesURl contains the url part after example.com/machines 
     //eg if url is example.com/machines/some/thing/else 
     //then $machinesUrl == 'some/thing/else' 
     //and params can be got at simply via $_GET 
     //after parsing url and calling api, its just a matter of loading a template: 
     locate_template('singe-machine.php', TRUE, TRUE); 
     //then stop processing 
     die(); 
    } 
}); 

それはURLへのさらなる部品なしでURLへのヒットを処理する唯一の他の事、例えばexample.com/machines:アクション'template_redirect'は、実際のURLがヒットした何かをします。

add_filter('request', function($vars=[]){ 
    if(isset ($vars['machines']) && empty ($vars['machines'])){ 
     $vars['machines'] = 'default'; 
    } 
    return $vars; 
}); 

これは容易にすることができる: それは勇気をwordpresses、空の文字列が偽と評価され、従ってスキップ、最終的なステップは、フィルタ'request'にフックし、デフォルト値を設定することで取得し、いくつかの点withingで判明しますクラス内にすべてをラップすることで改善されました。 url解析とテンプレート読み込みロジックは基本的なルータに渡すことができます。初歩的なMVC設定であっても、ファイルなどから経路を読み込むことはできますが、上記のように開始点

関連する問題