我需要使用URL参数?m=1 用不同的模板加载wordpress的每个页面,但问题是我无法提取可以使用规范URL访问的文本和帖子我尝试了不同的方法,对我来说最好的方法是使用template_redirect 行动挂钩或template_include 过滤器问题是,我无法使用任何这种方法将数据加载到模板文件中模板加载,但页面是空的,使用某些方法,它会返回404错误,以便更好地解释我的问题
我将此代码添加到functions.php
add_filter( \'template_include\', \'custom_template\' );
function custom_template($template) {
global $post, $wp_query;
if ($wp_query->query_vars[\'m\'] === \'1\') {
return TEMPLATEPATH . \'/custom-template.php\';
} else {
return $template;
}
}
我无法将帖子加载到模板文件
custom-template.php 此代码返回空白
<div id="content">
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<h2 class="item"><span class="fn"><?php the_title(); ?></span></h2>
<?php the_content(); ?>
<?php endwhile; else: ?>
<?php endif; ?>
</div>
代码呈现为空白
<div id="content">
</div>
我需要一个带有URL参数的自定义模板
?m=1 并在规范url中加载相同的帖子是否有任何工作方法可以使用url参数显示具有有效帖子数据和标题的自定义模板
?m=1
最合适的回答,由SO网友:terminator5505 整理而成
以下是通过保留wordpress参数强制更改主题的完整代码
add_action(
\'pre_get_posts\',
\'my_pre_get_posts\'
);
function my_pre_get_posts($wp_query) {
global $wpdb;
// Confirm request is main query
if(!$wp_query->is_main_query()) {
return;
}
// Get post name from query
$post_name = $wp_query->get(\'pagename\');
// Get post type from database
$post_type = $wpdb->get_var(
$wpdb->prepare(
\'SELECT post_type FROM \' . $wpdb->posts . \' WHERE post_name = %s LIMIT 1\',
$post_name
)
);
// Confirm page is post
if ($post_type === \'post\') {
$wp_query->set(\'m\', \'\');
}
}
add_action(
\'template_redirect\',
\'my_template_redirect\'
);
function my_template_redirect() {
global $post, $wp_query;
if ($wp_query->query[\'m\'] === \'123\') {
include TEMPLATEPATH . \'/template-name.php\';
die();
}
}
只要向函数中添加全局$wp\\u查询,就可以使用template include方法代替template\\u重定向挂钩