ページを作成せずに特定のURLにテンプレートファイルを使用する


14

そのテンプレートのページを作成せずに特定のURLのテンプレートファイルを使用することが可能かどうか疑問に思います。

これは私の単純化された問題です:

WPで、後続のフォームデータ(mysite.com/retail/?a=test&b=1234)を含む特定のURLを指すリンクコンテンツを含むページを作成しました。

「小売」という名前のページを作成し、そこからテンプレートページを選択することなく、子テーマディレクトリにあるテンプレートファイルtemplate-retail.phpをそのURL(小売)が自動的に使用するようにします。template-retail.phpファイルには外部コンテンツのみがあり、Wordpress自体からは何もありません。

これは可能ですか?


1
ファイルへのHTAccessリダイレクトを作成し、そこでリクエストを処理する必要があります。
Howdy_McGee

この場合、.htaccessファイルにアクセスできません。他の方法はありますか?
キート

これらの種類の操作を行うためのアクセスを提供するプラグインがあります。どちらの方法でも、カスタムファイルをサーバーにアップロードして、ヒットするものを用意する必要があります。
Howdy_McGee

4
プロジェクトのすべての詳細についてはtemplate_redirect
わかり

回答:


15

urlを見て、ファイルをロードして終了するだけです。

これは、WordPressが環境をロードしたときに実行できます(例:)'init'

add_action('init', function() {
  $url_path = trim(parse_url(add_query_arg(array()), PHP_URL_PATH), '/');
  if ( $url_path === 'retail' ) {
     // load the file if exists
     $load = locate_template('template-retail.php', true);
     if ($load) {
        exit(); // just exit if template was found and loaded
     }
  }
});

そうすることで、スラッグ「小売」のある実際のページは決して使用できないことに注意してください。

これは非常に簡単ですが、ハードコーディングされているため、1ページに必要な場合は問題ありません。さらにURLを制御する必要がある場合は、この回答で提案されているソリューションをご覧ください。


ご回答有難うございます。上記のコードを動作させることができません。これは本当のことはありません:「($ url_path === 『小売』)場合{」$のurl_pathが値を持つ文字列です:「example.com/retail
Keat

var_dump($url_path);それがどのように見えるか試してみて、コードを調整してください。その値は実際の URLに依存します。たとえば、カスタムホームURL、またはサブフォルダーにインストールされたWPは異なる場合があります。@Keat
gmazzap

1
返信いただきありがとうございます。回答が遅れて申し訳ありません。このソリューションを使用しましたが、完璧に機能します。$url_path = trim(parse_url(add_query_arg(array()), PHP_URL_PATH), '/'); $templatename = 'retail'; $pos = strpos($url_path, $templatename); if ($pos !== false) {
キート

5

このinitアクションは、あなたが達成しようとしているものには適していません。template_include代わりにフィルターを使用する必要があります。これを組み合わせget_query_varてURLパラメーターを取得し、ロードする必要のあるテンプレートを確認します。リンクは次のとおりです。

コード:

add_filter( 'template_include', 'portfolio_page_template', 99 );

function portfolio_page_template( $template ) {

    if ( is_page( 'portfolio' )  ) {
        $new_template = locate_template( array( 'portfolio-page-template.php' ) );
        if ( '' != $new_template ) {
            return $new_template ;
        }
    }

    return $template;
}

1

これを行うWordPressの方法はpage-templatesです。https://developer.wordpress.org/themes/template-files-section/page-template-files/

WordPressテンプレートのコードのみが必要です。WordPressテーマで、ページテンプレートを作成し、名前を変更できます

page-id.php

その特定のページは自動的にそれをピックアップし、テンプレートを使用します。

たとえば、ページのIDが5874の場合、テンプレートに次の名前を付けます。 page-5784.php

ページスラッグに基づいてテンプレートに名前を付けることもできます。たとえば、ページのスラッグがhello-worldテンプレートの場合、テンプレート名はpage-hello-world.php

参照:-https : //developer.wordpress.org/files/2014/10/template-hierarchy.png


0

@ shivanand-sharmaこれは完璧でクリーンな方法です(https://developer.wordpress.org/themes/template-files-section/page-template-files/)ワードプレスの他のページを作成しますページを非表示にするには、シンプルで効果的なプラグイン「https://wordpress.org/plugins/exclude-pages/」を使用します

私は私が作るためにURLが必要であったと言わなければならないPOSTをまたはGETので、これと他の問題を- 「>セッション)WC(」、およびこの解き自分のページに、いくつかのセッションデータを保存するカスタムのバックボーンを持つことができますワードプレス全体のすべての 'require(' wp-load ')などを含むphpコード、処理するwoocommerceなどmysite.com / index.php / MYPAGE .....

あなただけが必要です:

最初:テーマの場所に「wp-content / themes / mytheme / customtemplate.php」のような新しいページのテンプレートとしてファイルを作成します(Wordpressで「テンプレート名」を確認できるようにコメントが重要です):

<?php /* Template Name: WhateverName */ 
echo 'Hello World';echo '</br>';
var_dump(WC()->session); 
var_dump($_POST);
var_dump($_GET);
?>

第二:通常は 'wp-admin'> Pagesでwordpressでページを作成します(MYPAGEのような名前を言うか、好きなようにスラッグを変更できます)。もちろん、前のテンプレートをこのページのテンプレートとしてリンクしますテンプレート属性セクションの「WhateverName」

それでは、新しいページ「mysite.com/index.php/MYPAGE」を開きましょう。

Hello World
object(WC_Session_Handler)#880 .....................

補足:カート、チェックアウトなどでJavaScriptまたはjquery関数を作成し、「スクリプト」HTMLタグ内で想像できるものをすべて作成し、次のようなコードを含めます。

var data = { action : actionName, dataA : etcA, dataB : etcB}
$.ajax({
    type:     'post',
    url:      'index.php/MYPAGE',
    data:     data,
    success:  function( response ) {
    },
    complete: function() {
    }
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.