允许在Single.php中扩展使用WordPress函数的最佳方式

时间:2015-02-11 作者:Bram Vanroy

我正在构建一个或多或少与众不同的布局,这迫使我在DOM中的内容上方有一个标题。结构如下:

<?php get_header(); ?>
<div id="wrapper">
    <header class="entry-header" style="background-image:url({url-to-post-thumbnail-of-current-post});">
        <h1 class="entry-title">{title-of-current-post}
            <span class="date">
                <time class="entry-date" datetime="{the-time-c}">{the-time}</time>
            </span>
        </h1>
    </header><!-- .entry-header -->
    <section id="main">
        <div id="main-content">
        <?php
            while ( have_posts() ) : the_post();
                get_template_part( \'content\', get_post_format() );
            endwhile;
        ?>

        </div>
    </section>
    <!-- section#main -->
    <?php require_once(trailingslashit(get_template_directory()) . "php/single-secondary.php"); ?>
</div>
<!-- div#wrapper -->

<?php get_footer(); ?>
正如你所见,我需要在header, 但这是在循环之外的,我不知道如何在循环之外获得这些信息。也许我可以运行一个额外的循环,但这不会导致开销吗?或者我可以以某种方式扩展循环吗?

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

所有模板都是在全局范围内生成的,因此您可以访问$wp_query, $post, get_queried_object()get_queried_object_id() 模板中的任意位置。

由于这在标题中,我还将使用条件检查,如is_single() 专门针对单个页面

SO网友:TheDeadMedic

您可以运行循环,在第一次迭代后中断,然后使用重置rewind_posts(), 或获取第一篇文章的ID(&A);将其传递给相应的模板标记。

就个人而言,我会选择后者:

<?php if ( have_posts() ) : $post_id = $wp_query->posts[0]->ID ?>

     <header>
          <?php echo get_the_title( $post_id ) ?>
     </header>

<?php endif ?>

结束

相关推荐

Iterate through ID's in loop

我已经基于category创建了一个自定义循环,现在我想运行一个函数,将当前帖子的特定ID作为参数进行迭代。我有。。$secondary_loop = new WP_Query(array( \'category_name\' => get_the_title(), \'posts_per_page\' => 5 )); while ( $secondary_loop->have_posts() ) : $secondary_loop->the_post();&#x