在主题文件夹中创建自定义php文件

时间:2014-11-20 作者:James Zhao

我正在开发一个需要订单页面的电子商务主题。我在主题文件夹中创建了一个名为order page的php文件。希望通过wordpress根url(example.com/order页)访问此页面

add_action(\'template_redirect\', \'template_redirect\');
function template_redirect(){
    $basename = basename($_SERVER[\'QUERY_STRING\']);
    echo $basename;
    if($basename==\'order-page\'){
        loadCustomTemplate(TEMPLATEPATH."/$basename.php");
    }
}

function loadCustomTemplate($template) {
    global $wp_query;
    if(!file_exists($template)){
        return;
    }
    $wp_query->is_page = true;
    $wp_query->is_single = false;
    $wp_query->is_home = false;
    $wp_query->comments = false;
    // if we have a 404 status
    if ($wp_query->is_404) {
    // set status of 404 to false
        unset($wp_query->query["error"]);
        $wp_query->query_vars["error"]="";
        $wp_query->is_404=false;
    }
    // change the header to 200 OK
    //header("HTTP/1.1 200 OK");
    //load our template
    include($template);
    exit;
}
Problem#1: 对于上面列出的函数,我只能使用示例。com/?订购页面以获取我想要的内容。如果我举个例子。com/订单页,我将获取url not found 错误

Problem#2: 当我有多个参数时,这个函数就不起作用了。例如,如果我有:

example.com/?order-page&product_id=001&type=digital
$basename将返回order-page&product_id=001&type=digital

使用$query_array=explode(\'&\',$basename) 并获得$query_array[0] 是一种可能的解决方案。有没有更好的方法?

2 个回复
SO网友:Tunji

问题#1:

您可以使用Page Template

Page Templates

WordPress按以下顺序查找模板文件:

页面模板-如果页面分配了自定义模板,WordPress将查找该文件,如果找到,则使用该文件在您的场景中,您的页面模板文件将是page-order-page.php, 然后wordpress会在有人访问时加载该文件(例如.com/order页)。

问题2:

对于问题2,您需要使用query_vars 滤器

function wpse169050_register_query_vars( $vars ) {
    $vars[] = \'product_id\';
    $vars[] = \'type\';
    return $vars;
} 
add_filter( \'query_vars\', \'wpse169050_register_query_vars\' );
然后,带有变量的订单url将是

example.com/order-page/?product_id=001&type=digital
然后,可以使用get_query_var 在模板文件中:

$product_id = get_query_var(\'product_id\');
$type       = get_query_var(\'type\');

SO网友:Lulu

您应该查看文档中的WordPress层次结构页面。这里是相关部分:第-{slug}页。php-如果页面slug是最近的新闻,WordPress将使用页面最近的新闻。php

http://codex.wordpress.org/Template_Hierarchy

结束

相关推荐

使用PHP阅读WordPress帖子

我是PHP和Wordpress的初学者,非常感谢您对我正在从事的项目的帮助。目前,我正在使用以下代码查询特定帖子,然后在wordpress网站中回显其过期日期(过期日期通过插件设置):<?php $postid = 3823; $date_format = __( \'d / m / Y\' ); $expiration_date = get_post_meta( $postid, \'_expiration_date\', true); e