基于页面本身创建‘Posts Page’循环

时间:2013-01-16 作者:Ben Everard

设置Settings -> Reading -> Posts Page 设置为我的“新闻”页面,并且home.php 模板已填充帖子。。。太棒了

但是,我还希望能够创建另一个循环(即使WP_Query 如果需要),其中包含我指定的实际页面Posts Page 是的。

每当我尝试实例化此循环时,它都会返回大量帖子,而不是我请求的页面。下面是我的代码,请将args与请求SQL进行比较:

<?php

    $page = new WP_Query(array(\'post_type\' => \'page\', \'page_id\' => 39));
    print_r($page);

    // REQUEST: SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type = \'page\' AND (wp_posts.post_status = \'publish\' OR wp_posts.post_status = \'private\') ORDER BY wp_posts.post_date DESC LIMIT 0, 10

?>
您可以看到请求SQL查询是错误的,我猜是因为我已经将页面设置为Posts Page 它阻止我在循环中使用它。

有办法解决这个问题吗?我想在中使用标题、内容和自定义字段home.php 样板

谢谢

2 个回复
SO网友:Mike Madern

您可以通过以下代码获取帖子的所选页面:

$page_for_posts = get_option( \'page_for_posts\' );
然后,通过以下方式获得请求的帖子:

$post = get_post( $page_for_posts );
并且,获取所需的数据:

echo apply_filters( \'the_title\', $post->post_title );
echo apply_filters( \'the_content\', $post->post_content );
echo get_post_meta( $post->ID, $key, $single);

SO网友:Chip Bennett

假设您正在使用home.php, 按照正常方式输出主查询循环,并希望使用$post 的信息page_for_posts 页码:

定义自定义查询using WP_Query() and appropriate post parameters.

  • 通过“get\\u选项”(“page\\u for\\u posts”)将页面的普通post对象作为目标
  • 输出自定义查询循环
  • 重置$post, 使用wp_reset_postdata().
  • 输出主查询循环,例如:

    <?php
    /**
     * Blog posts index template file: home.php
     */
    
    get_header();
    
     // Let\'s output your custom loop *first*
    $home_query_args = array(
        \'page_id\' => get_option( \'page_for_posts\' )
    );
    $home_query = new WP_Query( $home_query_args );
    
    if ( $home_query->have_posts() ) : while ( $home_query->have_posts() ) : $home_query->the_post();
        // Output your custom query as per normal,
        // using all normal post template tags,
        // such as the_title(), the_content(), the_permalink(), etc.
    endwhile; endif;
    
    // IMPORTANT: Reset $post
    wp_reset_postdata();
    
     // Now output the main loop query
    if ( have_posts() ) : while ( have_posts() ) : the_post();
        // Normal loop output here,
        // using all normal post template tags
    endwhile; endif;
    
    get_footer();
    
    这里的秘方是wp_reset_postdata(). 它重置$post 全局到主循环查询。

  • 结束

    相关推荐

    Excluded category from loop

    我使用它从循环中排除特定类别。它做到了这一点,但它也做到了这一点:在我的页面上,它显示了除此之外的其他类别的帖子。/** Replace the standard loop with our custom loop */ remove_action( \'genesis_loop\', \'genesis_do_loop\' ); add_action( \'genesis_loop\', \'child_do_custom_loop\' ); function chil