我希望CMS拥有不同的页面(例如“职业”,“工作”,“团队”),每个页面都有自己的模板,然后将它们组合成一个大的可滚动页面(例如“我们的公司”)那将有一个模板。我该怎么做?
我知道使用作为一个函数get_page
但已被弃用(并替换为get_post
,这不是同一件事),但是不能检索页面的模板。
我想要页面和模板,所以我可以输出到主页面。
我也想要它,所以如果有人点击导航菜单转到“工作”或“团队”,它会将他们带到“我们的公司”页面,但是有一个查询字符串,所以我可以滚动它们到页面的那一部分
这可能吗?
答案 0 :(得分:2)
首先为主页面模板选择默认模板并在那里写下全局元素。在此模板中,使用get_template部分来包含页面
<!--custom query for pages-->
<?php
$args= array('post_type'=>'page');
$query= new WP_Query($args);
$query->while(have_posts()):query->the_post();
$temp_name= get_page_template_slug( $post->ID );
$temp_name_exp =explode('.',$temp_name);
get_template_part($temp_name_exp[0]);
endwhile;
endif;
?>
在职业生涯中,博客等页面
<?php
/*
Template name: Career or blog or something else
*/
?>
<?php the_tiele();
the_content();
?>
有
“我也想要它,所以如果有人点击导航菜单转到”工作“或”团队“,它会将它们带到”我们的公司“页面,但是有一个查询字符串,所以我可以将它们滚动到那个部分页”
将每个页面包装器分配给页面slug示例<section class="<?php echo $post->post_name; ?>">
并编写一个函数以将您的视图页面链接重定向到http://yoursiteurl/#page-slug
答案 1 :(得分:1)
修改强>
为了将一个页面的内容转换为另一个页面,请使用以下函数:
function show_post($path){
$post = get_page_by_path($path);
$content = apply_filters('the_content', $post->post_content);
echo $content;
}
然后为“我们的公司”页面(例如template-our_company.php
)创建一个模板,您可以在该页面中调用该函数(例如<?php show_post('careers'); /* Shows the content of the "Careers" page using the slug. */ ?>
)。
因此模板文件应包含以下内容:
<?php
show_post('careers');
show_post('jobs');
show_post('team');
?>
对于第二个问题,您需要调整template-our_company.php文件,如下所示:
<?php
<div id="careers"></div>
show_post('careers');
<div id="jobs"></div>
show_post('jobs');
<div id="team"></div>
show_post('team');
?>
然后在菜单信息中心,只需将导航链接调整为“/ our-company / #careers”等内容。
编辑2
要在另一个模板中检索具有指定模板的页面内容,您可以执行以下操作: 创建模板(文件careers.php和jobs.php)以及将使用这些模板的帖子
/*
Template Name: Careers
*/
...
/*
Template Name: Jobs
*/
然后在“父”模板中,您可以查询已选择上述指定模板的帖子 未经测试的代码
$args = array(
'meta_query' => array(
'relation' => 'OR',
array(
'key' => '_wp_page_template',
'value' => 'careers.php',
'compare' => '='
),
array(
'key' => '_wp_page_template',
'value' => 'jobs.php',
'compare' => '='
)
)
);
$myposts = get_posts( $args );
foreach ( $myposts as $post ) : setup_postdata( $post );
the_content();
// or add anything else
endforeach;
wp_reset_postdata();
答案 2 :(得分:0)
@ user3418748的回答对我来说是一个好的开始,但在我的情况下,我需要加载特定的页面,我发现只使用get_template_part()
本身并不是因为加载了任何内容,我是在循环之外做的。为了使其工作,您需要先将全局$post
变量设置为要显示的页面/帖子。这是我使用的函数(将mytemplate
替换为您的tempalte名称):
function mytemplate_show_page($path) {
global $post;
$post = get_page_by_path($path);
$tpl_slug = get_page_template_slug($post->ID);
$tpl_slug_exp = explode('.', $tpl_slug);
get_template_part($tpl_slug_exp[0]);
}