修改以下代码以显示静态页面发布页面的标题和内容?

时间:2011-01-26 作者:janoChen

我读了一篇关于如何Display the contents of static page Posts page.

基本上,我必须将此代码放在循环之前:

<?php //This is the code from the tutorial
if ( \'page\' == get_option(\'show_on_front\') && get_option(\'page_for_posts\') && is_home() ) : the_post();
 $page_for_posts_id = get_option(\'page_for_posts\');
 setup_postdata(get_page($page_for_posts_id));
?>
 <div id="post-<?php the_ID(); ?>" class="page">
  <div class="entry-content">
   <?php the_content(); ?>
   <?php edit_post_link(\'Edit\', \'\', \'\', $page_for_posts_id); ?>
  </div>
 </div>
<?php
 rewind_posts();
endif;
?>
我还想包括the_content, 但相反the_title 显示了第一篇帖子(博客)中的:

<div class="entry-content">
       <?php the_title(); ?>
       <?php the_content(); ?>
       <?php edit_post_link(\'Edit\', \'\', \'\', $page_for_posts_id); ?>
      </div>
图片:enter image description here

Code:

loop.php

<?php
if ( \'page\' == get_option(\'show_on_front\') && get_option(\'page_for_posts\') && is_home() ) : the_post();
    $page_for_posts_id = get_option(\'page_for_posts\');
    setup_postdata(get_page($page_for_posts_id));
?>
<div class="shadow-top">
    <!-- Shadow at the top of the slider -->
</div>
<div id="intro2">
    <div class="container">
        <h2><?php the_title(); ?></h2>
        <p><?php the_content(); ?></p>
        <?php edit_post_link(\'Edit\', \'\', \'\', $page_for_posts_id); ?>
    </div><!-- .container -->
</div><!-- #featured -->
<div class="shadow-bottom">
    <!-- Shadow at the bottom of the slider -->
</div>
<div id="content">
    <div class="container">
        <div id="blog">
            <div class="posts">
                <?php
                    rewind_posts();
                endif;
                ?>
            </div>

<?php
    /* Start the Loop.
     *
     * In Twenty Ten we use the same loop in multiple contexts.
     * It is broken into three main parts: when we\'re displaying
     * posts that are in the gallery category, when we\'re displaying
     * posts in the asides category, and finally all other posts.
     *
     * Additionally, we sometimes check for whether we are on an
     * archive page, a search page, etc., allowing for small differences
     * in the loop on each template without actually duplicating
     * the rest of the loop that is shared.
     *
     * Without further ado, the loop:
     */ ?>
<?php while ( have_posts() ) : the_post(); ?> 
(…)

blog.php:

<?php
/**
 * Template Name: Blog
 * @package WordPress
 * @subpackage Prominent
 * @since Prominent 1.0
 */
get_header(); ?>
        <?php // Start the Main Loop
        if ( have_posts() ) : ?>
            <?php while ( have_posts() ) : the_post(); ?>
        <div class="posts">
                 <h2><?php the_content(); ?></h2>
            </div><!-- .content -->
        </div><!-- .posts -->
            <?php endwhile; ?>
        <?php endif; ?>
        <?php get_sidebar(); ?>
    </div><!-- .container -->
</div><!-- #content-bottom -->
<?php get_footer(); ?>
有什么建议吗?

EDIT:

现在我正在使用以下代码。它检索页面的特定the_content 但在检索\\u标题时,它仍然检索第一篇博客文章。

<?php
/**
 * Template Name: Blog
 * @package WordPress
 * @subpackage Prominent
 * @since Prominent 1.0
 */
get_header(); ?>
<div class="shadow-top">
    <!-- Shadow at the top of the slider -->
</div>
<div id="intro2">
    <div class="container">
        <?php /* Display the contents of static page Posts page */
        if ( \'page\' == get_option(\'show_on_front\') && get_option(\'page_for_posts\') && is_home() ) : the_post();
            $page_for_posts_id = get_option(\'page_for_posts\');
            setup_postdata(get_page($page_for_posts_id));
        ?>
            <div id="post-<?php the_ID(); ?>" class="page">
                <div class="content">
                    <h2><?php the_content(); ?></h2>
                    <?php edit_post_link(\'Edit\', \'\', \'\', $page_for_posts_id); ?>
                </div>
            </div>
        <?php
            rewind_posts();
        endif;
        ?>
    </div><!-- .container -->
</div><!-- #featured -->
<div class="shadow-bottom">
    <!-- Shadow at the bottom of the slider -->
</div>
<div id="content">
    <div class="container">
        <div id="blog">
    <div class="container">

        <?php // find all content that has the type of video and then to loop through them. ?>

        <?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>

                        <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                            <?php if ( is_front_page() ) { ?>
                                <h2 class="entry-title"><?php the_title(); ?></h2>
                            <?php } else { ?>
                                <h1 class="entry-title"><?php the_title(); ?></h1>
                            <?php } ?>

                            <div class="entry-content">
                                <?php the_content(); ?>
                                <?php wp_link_pages( array( \'before\' => \'<div class="page-link">\' . __( \'Pages:\', \'twentyten\' ), \'after\' => \'</div>\' ) ); ?>
                                <?php edit_post_link( __( \'Edit\', \'twentyten\' ), \'<span class="edit-link">\', \'</span>\' ); ?>
                            </div><!-- .entry-content -->
                        </div><!-- #post-## -->

                        <?php comments_template( \'\', true ); ?>

        <?php endwhile; ?>
        </div>
        <?php get_sidebar(); ?>
    </div><!-- .container -->
</div><!-- #content-bottom -->
<?php get_footer(); ?>

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

这是一项相对简单的任务,您只需将一个适当编码的页面模板附加到所选帖子的页面上。

当页面第一次加载时,主查询保存页面上的数据,如标题、内容等,我们可以通过调用the_post 这样我们就可以简单地调用模板标签来生成页面的标题(etc)。然后我们可以打电话query_posts 并用所选的帖子重新填充主查询对象。

这与此处的法典中给出的示例非常相似
http://codex.wordpress.org/Pages#A_Page_of_Posts

这里的主要区别是,我不需要创建第二个查询对象,而是要重用主查询对象(为什么不呢,在这种情况下是有意义的,imho)。

根据需要调整代码(查询参数/HTML/类/ID)。

<?php
/**
 * Template Name: Page of Posts
 *
 * Selectable from a dropdown menu on the edit page screen.
 */
get_header(); 
?>

<div id="container">
    <div id="content">

        <?php the_post(); // Setup post data so it\'s possible to call the regular loop template tags ?>
        <h2><?php the_title(); ?><h2>
        <div <?php post_class(); ?>><?php the_content(); ?></div>

        <?php 
        $args = array( 
            \'paged\' => (int) get_query_var(\'paged\'), 
            \'post_type\' => \'post\', 
            \'order\' => \'desc\', 
            \'posts_per_page\' => 3, 
            \'caller_get_posts\' => 1 
        );
        // Now re-define the main query
        query_posts( $args ); 
        ?>

        <?php if( have_posts() ) : ?>

            <?php while( have_posts() ) : the_post(); ?>

                <h2><?php the_title(); ?></h2>
                <div <?php post_class(); ?>><?php the_content(); ?></div>

            <?php endwhile; ?>

        <?php endif; ?>

    </div>
</div>

<?php //get_sidebar(); ?>
<?php get_footer(); ?>
希望这有帮助。。

更新后的回复如下

如果使用page_for_posts 设置时,不要尝试使用和页面模板,请使用其中一个或另一个,因为两者不能一起工作。

如果要在页面上显示帖子列表/索引,并让本机主题文件处理呈现,请设置page_for_posts 设置(管理>设置>读取)。

当您需要控制一个帖子页面的呈现方式,并对其进行自定义时,而不是在主题文件中摆弄,试图找出哪个文件正在处理输出,然后添加条件逻辑,而是创建一个页面(或选择一个现有页面)并向其附加页面模板。仅由not 设置page_for_posts 设置是否允许使用附加模板呈现此页面。

enter image description here

忽略我的首页设置,显然你可能有一个更合适的页面设置,请注意我没有设置posts页面设置。如果您按照屏幕截图中的设置进行设置,则提供的模板将正常工作,并且帖子页面的行为将与设置帖子页面设置时的行为相同(除非它显然会执行一些自定义操作)。

Summary
-当您设置page_for_posts 设置您预先将模板附加到该页面的任何功能,将其取消设置,模板将按预期工作。

Edit: 实际上,在你的另一个问题中,拉斯特指出了这种行为
Template file for static posts page does not get loaded

SO网友:helgatheviking

您可以跳过设置post数据,直接转到queried object.

$queried_object = get_queried_object();

if( ! is_wp_error( $queried_object ) ) {

    if ( isset( $queried_object->post_title ) )
        echo \'<h1>\' . $queried_object->post_title . \'</h1>\';

    if ( isset( $queried_object->post_content ) )
        echo \'<p>\' . $queried_object->post_content . \'</p>\';

}

结束