我正在开发一个插件。该插件可以自定义帖子类型" product"。首先,我使用template_redirect
操作重定向到单页和类别页面。
这是我的template_redirect代码:
add_action("template_redirect", 'my_theme_redirect');
function my_theme_redirect() {
global $wp;
$plugindir = dirname(__FILE__);
//A Specific Custom Post Type
if ($wp->query_vars["post_type"] == 'product') {
$templatefilename = 'single-product.php';
if (file_exists(TEMPLATEPATH . '/' . $templatefilename)) {
$return_template = TEMPLATEPATH . '/' . $templatefilename;
} else {
$return_template = $plugindir . '/themefiles/' . $templatefilename;
}
do_theme_redirect($return_template);
}
if (is_tax('prodcategories')) {
$templatefilename = 'taxonomy-prodcategories.php';
if (file_exists(TEMPLATEPATH . '/' . $templatefilename)) {
$return_template = TEMPLATEPATH . '/' . $templatefilename;
} else {
$return_template = $plugindir . '/themefiles/' . $templatefilename;
}
do_theme_redirect($return_template);
}
}
function do_theme_redirect($url) {
global $post, $wp_query;
if (have_posts()) {
include($url);
die();
} else {
$wp_query->is_404 = true;
}
}
它的工作完美。但是现在我正在尝试使用template_include
过滤器,但是我的网站无法正常工作。
这是template_include代码:
add_filter("template_include", 'my_theme_redirect');
function my_theme_redirect($templatefilename) {
global $wp;
$plugindir = dirname(__FILE__);
//A Specific Custom Post Type
if ($wp->query_vars["post_type"] == 'product') {
$templatefilename = 'single-product.php';
if (file_exists(TEMPLATEPATH . '/' . $templatefilename)) {
$return_template = TEMPLATEPATH . '/' . $templatefilename;
} else {
$return_template = $plugindir . '/themefiles/' . $templatefilename;
}
return $return_template;
}
if (is_tax('prodcategories')) {
$templatefilename = 'taxonomy-prodcategories.php';
if (file_exists(TEMPLATEPATH . '/' . $templatefilename)) {
$return_template = TEMPLATEPATH . '/' . $templatefilename;
} else {
$return_template = $plugindir . '/themefiles/' . $templatefilename;
}
return $return_template;
}
}
function do_theme_redirect($url) {
global $post, $wp_query;
if (have_posts()) {
include($url);
die();
} else {
$wp_query->is_404 = true;
}
}
我出错的任何建议
答案 0 :(得分:0)
好的,我自己完成了。
我删除了以上所有代码并编写了此代码。它对我来说很完美
代码:
function template_chooser($template){
global $wp_query;
$plugindir = dirname(__FILE__);
$post_type = get_query_var('post_type');
if( $post_type == 'product' ){
return $plugindir . '/themefiles/single-product.php';
}
if (is_tax('prodcategories')) {
return $plugindir . '/themefiles/taxonomy-prodcategories.php';
}
return $template;
}
add_filter('template_include', 'template_chooser');