使用特定URL的模板文件,而无需创建页面

时间:2015-03-30 作者:Keat

我想知道是否可以为特定url使用模板文件,而不必为该模板创建页面。

这是我的简化问题:

我在WP中创建了一个页面,其中包含一些指向特定url的链接内容,其中包含一些后续表单数据:(mysite.com/retail/?a=test&;b=1234)

我希望该url(零售)自动使用我的模板文件template retail。php,而无需创建名为“retail”的页面;从那里选择模板页面。模板零售中只有外部内容。php文件,Wordpress本身没有任何内容。

这可能吗?

4 个回复
最合适的回答,由SO网友:gmazzap 整理而成

您只需查看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
     }
  }
});
请注意,这样做永远不能使用带有slug“retail”的real页面。

这很简单,但也是硬编码的,所以如果您需要将其用于单个页面,也可以。如果需要控制更多URL,请查看中建议的解决方案this answer.

SO网友:adamj

这个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;
}

SO网友:Shivanand Sharma

WordPress的方法是page-templates. https://developer.wordpress.org/themes/template-files-section/page-template-files/

您只需要WordPress模板的代码。在WordPress主题中,您可以创建页面模板并将其重命名为

page-id.php

该特定页面将自动拾取并使用模板。

例如,如果您的页面id为5874,则将模板命名为page-5784.php

您还可以根据页面slug来命名模板。例如,如果页段塞为hello-world 然后模板名称将为page-hello-world.php

另请参见:-https://developer.wordpress.org/files/2014/10/template-hierarchy.png

SO网友:Jose Velandia

@shivanand sharma这是一种完美而干净的方法(https://developer.wordpress.org/themes/template-files-section/page-template-files/) 要像wordpress中的任何其他页面一样创建任何页面,如果您想隐藏页面,我只需使用简单有效的插件\'https://wordpress.org/plugins/exclude-pages/\'

我必须说我需要一个URLPOSTGET 到我自己的页面并保存一些会话数据“WC()->session”,这就解决了这个问题和其他问题,因为you can have a backbone of custom php code including all the \'require(\'wp-load\') etc\' of the entire wordpress, woocommerce etc 通过,mysite.com/index.php/MYPAGE .....

您只需要:

First: 在主题位置内创建一个文件作为新页面的模板,例如“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);
?>
Second: 在wordpress上创建一个页面,通常通过\'wp admin\'>页面(比如MYPAGE, 或者,您可以随意更改slug)并将以前的模板链接为此页面的模板,即name\'WhateverName\' 在模板属性部分。

那么,让我们打开新的页面\'mysite.com/index.php/MYPAGE\' 你会看到的。

Hello World
object(WC_Session_Handler)#880 .....................
Extras: 让我们在cart、checkout和“script”HTML标记中创建javascript或jquery函数,并包括如下代码:

var data = { action : actionName, dataA : etcA, dataB : etcB}
$.ajax({
    type:     \'post\',
    url:      \'index.php/MYPAGE\',
    data:     data,
    success:  function( response ) {
    },
    complete: function() {
    }
});

结束

相关推荐

Custom user profile URLs

我创建了一个页面“profile”,当使用用户id的get变量访问该页面时,如:http://example.com/profile/?uid=1 然后将显示用户id的配置文件详细信息1. 现在我想重写…http://example.com/profile/?uid=1 …至…http://example.com/profile/admin 如何做到这一点?