我整个上午都在寻找无济于事的答案。我正在构建一个单页的WordPress模板。我有一个主页,它使用一个名为one-page.php的页面模板,它在所有其他页面中提供。继承载该模板的php:
<?php
$args = array(
'post_type' => 'page',
'order' => 'ASC'
);
$the_query = new WP_Query( $args );
?>
<?php if ( have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<?php get_template_part( 'content', 'page' ); ?>
<?php endwhile; endif; ?>
此代码效果很好。所有部分都可以使用content-page.php模板部分,不包括我希望使用另一个模板部分的投资组合部分,该部分带来所有投资组合自定义帖子类型。
我试图在one-page.php和content-page.php中添加条件if语句,如下所示:
<?php if ( is_page( 'portfolio' ) ) : ?>
//My portfolio custom post type loop is here
<? endif; ?>
但这也不起作用 - 我认为这是因为is_page()函数将检查当前正在显示的页面,即主页。而不是弄清楚查询当前正在处理什么页面 - 但我不确定。
任何人都可以帮助我理解如何有条件地将投资组合部分加载到单独的模板部分中吗?
答案 0 :(得分:1)
你可以实现这个检查页面slug,你可以在循环中获得。如果是&#34;投资组合&#34; (或者保存的任何内容),加载content-portfolio.php
,否则content-page.php
。像这样:
if (have_posts()) : while ($the_query->have_posts()) : $the_query->the_post();
if ("portfolio" === $post->post_name) {
get_template_part('content', 'portfolio');
} else {
get_template_part('content', 'page');
}
endwhile; endif;
答案 1 :(得分:0)
在文件中设置条件
<?php
if (have_posts()) : while ($the_query->have_posts()) : $the_query->the_post();
if (is_page('portfolio')) {
get_template_part('content', 'portfolio');
} else {
get_template_part('content', 'page');
}
endwhile; endif;
?>
创建一个名为content-portfolio.php
的模板文件,该文件是content-page.php
的副本,并将下面的代码放入其中。如果它显示&#39; call&#39;这意味着你的模板正在运行。
<强> portfolio.php 强>
<?php
echo "portfolio.php";
die('Call');
?>