如何将页面(及其模板)组合到一个页面中?

时间:2014-01-30 18:57:05

标签: php wordpress templates wordpress-theming custom-wordpress-pages

我希望CMS拥有不同的页面(例如“职业”,“工作”,“团队”),每个页面都有自己的模板,然后将它们组合成一个大的可滚动页面(例如“我们的公司”)那将有一个模板。我该怎么做?

我知道使用作为一个函数get_page但已被弃用(并替换为get_post,这不是同一件事),但是不能检索页面的模板。

  1. 我想要页面和模板,所以我可以输出到主页面。

  2. 我也想要它,所以如果有人点击导航菜单转到“工作”或“团队”,它会将他们带到“我们的公司”页面,但是有一个查询字符串,所以我可以滚动它们到页面的那一部分

  3. 这可能吗?

3 个答案:

答案 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]);
}