我希望CMS具有不同的页面(例如”
职业”
, “
工作”
, “
团队”
), 每个页面都有自己的模板, 然后将它们组合成一个大的可滚动页面(例如”
Our Company”
)模板。我该怎么做?
我知道过去曾经有一个函数get_page, 但是已经过时了(并用不一样的get_post代替了), 但是它不会检索页面的模板。
- 我同时需要页面和模板, 因此我可以将它们都输出到主页中。
- 我也希望这样, 如果有人在导航菜单中单击以转到” 工作” 或” 团队” , 它将带他们到” 我们的公司” 页面, 但是带有查询字符串, 因此我可以将其滚动到页面的该部分
#1首先为主页模板选择默认模板, 然后在其中编写全局元素。在此模板中, 使用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- ug
#2编辑
为了使一页的内容进入另一页, 请使用以下功能:
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’ ); / *显示” 职位” 页面(* /?> )。
因此, 模板文件应包含以下内容:
<
?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');
?>
【如何将页面(及其模板)合并为一页()】然后在菜单面板中, 只需将导航链接调整为” /我们的公司/#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();
#3@ user3418748的答案对我来说是一个不错的开始, 但就我而言, 我需要加载特定的页面, 并且我发现仅使用get_template_part()本身并不会加载任何内容, 因为我是在循环外进行的。为了使它起作用, 你需要首先将全局$ post变量设置为要显示的页面/帖子。这是我使用的函数(将mytemplate替换为你的临时模板的名称):
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]);
}
推荐阅读
- WooCommerce(删除Twenty twelve子主题的类别页面的侧边栏)
- 选择专用IP地址还是共享IP地址((揭穿神话))
- WordPress(Avada主题)谷歌字体拉丁扩展无法正常工作
- WordPress将类别父母作为类别数组
- WordPress 4.5.2(未捕获的ReferenceError:未定义JQuery [关闭])
- WooCommerce在使用get_image()时显示占位符图像
- jQuery开始之旅
- 手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏02支持中文及显示FPS
- 学习Java必备的基础知识打卡12.28,要想学好必须扎实基本功(?建议收藏)#yyds干货盘点#