2016-08-16 6 views
1

基本的なカスタムテーマを使って、クリーンなWordPressのインストールがあるとします。Wordpressでシンプルな動的ルートを実装する

このテーマでは、別のドメインのWebアプリケーションを指すiframeだけのカスタムページテンプレートがあります。

私のWordPressのインストールはhttp://example.comに、iframeテンプレートのページはhttp://example.com/members/にあります。

(例えば)http://example.com/members/login、またはhttp://example.com/members/event/1へのすべての要求がすべてhttp://example.com/members/に行くが、ルート(「/ログイン」、または「/イベント/ 1」の第2の部分を通過するよう、私は今、ダイナミックルートを追加したいです)を内部のiframeに渡します。

Wordpressの内部構造をハックすることなく、これを達成する最良の方法は何でしょうか?

私はこのプラグインを見つけましたが、私はそれを使用してみるとWordpressの組み込みルーティングを完全に上書きすることに気付きました。これは、それぞれのURLを手動で再追加する必要があることを意味しましたそれは私のクライアントがPHPファイルを手作業で編集することなく投稿できる必要があるため、PHPで完成したわけではありません)。

ありがとうございます。

答えて

0

Fencer04の提案のおかげで、私は自分の問題の解決策を見つけることができました。私はこのページを見つけました:https://developer.wordpress.org/reference/functions/add_rewrite_rule/ここで私は十分に自分の問題に近づいた例を見つけました。 functions.phpでそう

function custom_rewrite_rule(){ 
    $page_id = 318; // replace this ID with the page with the iFrame template 

    $page_data = get_post($page_id); 

    if(!is_object($page_data)){ 
     return; // all other pages don't have to support custom deeplinks 
    } 

    // catches deeplinks 1 level deep, i.e.: /members/profile 
    add_rewrite_rule(
     $page_data->post_name . '/([^/]+)/?$', 
     'index.php?pagename=' . $page_data->post_name . '&memberspage=$matches[1]', 
     'top' 
    ); 

    // catches deeplinks 2 levels deep, i.e.: /members/profile/edit 
    add_rewrite_rule(
     $page_data->post_name . '/([^/]+)/([^/]+)/?$', 
     'index.php?pagename=' . $page_data->post_name . '&memberspage=$matches[1]&members_param=$matches[2]', 
     'top' 
    ); 

    // catches 3 levels deep, i.e. /members/profile/edit/confirm 
    add_rewrite_rule(
     $page_data->post_name . '/([^/]+)/([^/]+)/([^/]+)/?$', 
     'index.php?pagename=' . $page_data->post_name . '&memberspage=$matches[1]&members_param=$matches[2]&members_param2=$matches[3]', 
     'top' 
    ); 

} 

add_action('init', custom_rewrite_rule); 

次の私は、新しいquery_vars用のフィルタを追加しました:

add_filter('query_vars', function($vars) { 
    $vars[] = "memberspage"; 
    $vars[] = "members_param"; 
    $vars[] = "members_param2"; 
    return $vars; 
}); 

[マイテンプレートiframe.phpに、私はそうのように、これらのパラメータにアクセスすることができます:

http://www.domain.com/members/loginに行くと、私には正しい静的WPページが表示されますページhttp://members.domain.com/login/を表示しているiframe内にあります。

2

あなたはそのようなadd_rerwite_ruleフックを使用してルーティングを追加することもできます。

function custom_rewrite_rule() { 
    add_rewrite_rule('members/([^/]+)/([^/]+)/?$','index.php?memberspage=$matches[1]&event_id=$matches[2]','top'); 
    } 
    add_action('init', 'custom_rewrite_rule', 10, 0); 

あなたが書き換えたURLに応じていくつかを作成する必要があります。テンプレートのURLパラメータを使用して、iframeに適切なページを読み込むことができます。

+0

これは機能しませんでしたが、正しい方向に私を設定しました。私は元の質問を私が見つけた解決策で更新します。ありがとう。 – gillesv

+0

私はあなたが私の答えを使ったと確信しています。あなたが作成したかったURLをすべて持っていなかったので、私は決してあなたの正確な答えを作り出すことができませんでした。私は少なくとも私の答えを投票する必要があると思う。 – Fencer04

+0

私の最終的な答えにはかなり大きな違いがあります。私が指定したコンテキストで試してみると、あなたのコードは私にとってはうまくいきませんでした。私のような人が解決策を探してこのページに来たら、あなた自身の簡単な返答は十分ではないでしょう。私は正しい方向に私を置くためにあなたに信用を与えました。とにかく、気になる点がある。 – gillesv

関連する問題