0

我对 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(); ?>

我很好奇为什么这适用于一个模板而不是主模板。而且,我是不是走错了路?在大多数情况下与用户所在的当前页面实际相关的子标题模板中的页面内容的正确方法是什么。

谢谢!

4

3 回答 3

0

不确定我是否完全理解您的问题,但如果您按照我的想法进行操作,那么在另一个循环上方的特定页面中有一大段文本会拉入某种或其他类型的帖子,我会使用模板命名结构。

<?php /* Template Name: My Template */ ?>

这将允许您使用标准循环从客户端将模板设置到的任何页面获取内容(避免您使用的静态 ID)。

您的主页错误可能是由于它未在阅读设置中设置为帖子页面。据我了解,如果页面未设置为帖子页面,它将像普通页面一样运行,除非您专门重写查询。

于 2012-06-26T12:52:49.907 回答
0

“在大多数情况下与用户所在的当前页面实际相关的子标题模板中的页面内容的正确方法是什么?”

与其尝试将两个不相关的页面/帖子联系在一起,不如使用自定义字段工具更容易。我目前最喜欢的是Advanced Custom Fields

使用 ACF,您可以将补充字段(图像、所见即所得、文件上传、总共 14 种字段类型)添加到您的帖子和页面,然后轻松地将自定义数据拉入您的模板。它有很好的文档记录并且非常易于使用。

于 2012-06-26T13:00:19.953 回答
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 -->
于 2012-06-26T14:36:28.433 回答