我正在开发一个需要订单页面的电子商务主题。我在主题文件夹中创建了一个名为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]
是一种可能的解决方案。有没有更好的方法?
SO网友:Tunji
问题#1:
您可以使用
Page TemplateWordPress按以下顺序查找模板文件:
页面模板-如果页面分配了自定义模板,WordPress将查找该文件,如果找到,则使用该文件第{slug}页。php-如果没有指定自定义模板,WordPress将查找并使用包含页面slug的专用模板第{id}页。php-如果找不到包含页面slug的专用模板,WordPress将查找并使用以页面ID命名的专用模板。php-如果找不到包含页面ID的专用模板,WordPress将查找并使用主题的默认页面模板指数。php-如果没有指定或找到特定的页面模板,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\');