我对Wordpress的模板结构和查询帖子有疑问。
我的模板设置在(例如)archive- $ posttype.php构建如下:
get_header();
$args = 'page_id=18'; //Client Uses page
query_posts($args); the_post();
get_template_part( 'sub-header' );
// Reset Query
wp_reset_query();
?>
<div class="content">
<?php get_template_part( 'loop' ); ?>...
我这样做是为我的sub-header.php文件设置我的默认$ post变量,该文件打印出该页面中的内容:
<div id="subheader">
<h1><?php echo get_post_meta($post->ID, 'header_title', true)?></h1>
<?php echo get_post_meta($post->ID, 'header_description', true)?>...
但是,在home.php模板上使用此方法不起作用:
get_header();
$temp_query = $wp_query;
$page_id = 119; //Client Uses page
#$post = get_page( $page_id );
$args = array('page_id' => $page_id);
$post = new WP_Query( $args ); the_post();
get_template_part( 'sub-header' );
wp_reset_postdata();
?>
<div class="content">
<?php get_template_part( 'loop' ); ?>
<?php get_sidebar( 'news' ); ?>
</div><!--.content -->
<?php get_footer(); ?>
我很好奇为什么这个工作在一个模板而不是主页模板上。而且,我是以错误的方式来做这件事的吗?在子标题模板中具有页面内容的正确方法是什么,在大多数情况下,该页面内容与用户所在的当前页面实际相关。
谢谢!
答案 0 :(得分:0)
我不确定我是否完全理解你的问题,但如果你正在按照我的想法行事,那么从另一个循环上方的特定页面中获取一大块文本会拉入某种类型的帖子,我会使用模板命名结构。
<?php /* Template Name: My Template */ ?>
这将允许您使用标准循环从客户端设置模板的任何页面获取内容(避免使用您使用的静态ID)。
您的主页错误可能是由于未将其设置为阅读设置中的帖子页面。据我了解,如果页面未设置为帖子页面,它将像普通页面一样,除非您专门重写查询。
答案 1 :(得分:0)
“在子标题模板中拥有页面内容的正确方法是什么,在大多数情况下,该页面内容实际上与用户所在的当前页面相关。”
不是试图将两个不相关的页面/帖子联系在一起,而是使用自定义字段工具可能更容易。我目前最喜欢的是Advanced Custom Fields。
使用ACF,您可以在帖子和页面中添加补充字段(图像,wysiwyg,文件上传,14种字段类型),然后轻松将自定义数据提取到模板中。它记录完备且非常易于使用。
答案 2 :(得分:0)
所以,我改变了我的sub-header.php模板的工作方式。基本上,对正在设置/调用的页面/帖子类型进行一些基本检查,然后动态提取相关的页面信息。
<?php
if (is_page()) :
$header_title = get_post_meta($post->ID, 'header_title', true);
$video_id = get_post_meta($post->ID, 'youtube_video_id', true);
$thumbnail = get_the_post_thumbnail($post->ID, 'post-thumbnail', array('class'=>'visual-element'));
$description = get_post_meta($post->ID, 'header_description', true);
elseif (is_home()) :
$page_id = 119; // News page
$page = get_page( $page_id );
$header_title = get_post_meta($page->ID, 'header_title', true);
$video_id = get_post_meta($page->ID, 'youtube_video_id', true);
$thumbnail = get_the_post_thumbnail($page->ID, 'post-thumbnail', array('class'=>'visual-element'));
$description = get_post_meta($page->ID, 'header_description', true);
elseif (is_archive()) :
$page_id = 18; // Client Uses page
$page = get_page( $page_id );
$header_title = get_post_meta($page->ID, 'header_title', true);
$video_id = get_post_meta($page->ID, 'youtube_video_id', true);
$thumbnail = get_the_post_thumbnail($page->ID, 'post-thumbnail', array('class'=>'visual-element'));
$description = get_post_meta($page->ID, 'header_description', true);
endif;
?>
<div id="subheader">
<h1><?php echo $header_title; ?></h1>
<?php if ( $video_id ) : ?>
<iframe class="visual-element" width="300" height="200" src="http://www.youtube.com/embed/<?php echo $video_id;?>?rel=0" frameborder="0" allowfullscreen></iframe>
<?php elseif ($thumbnail) : ?>
<?php echo $thumbnail; ?>
<?php endif; ?>
<?php echo $description; ?>
</div><!-- #subheader -->