使用页面作为内容的单页主题

时间:2012-10-24 作者:saltcod

我正在制作一个单页网站。在这个页面上,我想运行三到四次WP\\u Query来拉入这3-4个页面。

页面看起来有点像这样:

<div class="row">
 <?php

    $args = array( \'pagename\' => \'page-1\'); 

    $the_query = new WP_Query( $args );

    // The Loop
    if ( $the_query->have_posts() ) :
    while ( $the_query->have_posts() ) : $the_query->the_post();
      get_template_part(\'content\');
    endwhile;
    endif;

    // Reset Post Data
    wp_reset_postdata();
?>
</div>


<div class="row">
 <?php

    $args = array( \'pagename\' => \'page-2\'); 

    $the_query = new WP_Query( $args );

    // The Loop
    if ( $the_query->have_posts() ) :
    while ( $the_query->have_posts() ) : $the_query->the_post();
      get_template_part(\'content\');
    endwhile;
    endif;

    // Reset Post Data
    wp_reset_postdata();
?>
</div>

<div class="row">
 <?php

    $args = array( \'pagename\' => \'page-3\'); 

    $the_query = new WP_Query( $args );

    // The Loop
    if ( $the_query->have_posts() ) :
    while ( $the_query->have_posts() ) : $the_query->the_post();
      get_template_part(\'content\');
    endwhile;
    endif;

    // Reset Post Data
    wp_reset_postdata();
?>
</div>
当然,我在这里重复我自己的话,这有点浪费。我要做的是对WP\\u Query的这个实例进行函数化。这是我所做的,但它似乎没有任何回报。它一定是很愚蠢的东西,但我看不出它可能是什么(在functions.php中):

/**
 * Functionize wp_query
 *
 * @since 0.1
 */
function waterstreet_fetch_page( $pagename ){
    $args = array( \'pagename\' => $pagename ); 

    $the_query = new WP_Query( $args );

    // The Loop
    if ( $the_query->have_posts() ) :
    while ( $the_query->have_posts() ) : $the_query->the_post();
      get_template_part(\'content\');
    endwhile;
    endif;

    // Reset Post Data
    wp_reset_postdata();
}
当然,在我的模板文件中,我希望能够运行:

<div class="row">
    <?php waterstreet_fetch_page(\'page-1\'); ?>
</div>

<div class="row">
    <?php waterstreet_fetch_page(\'page-2\'); ?>
</div>

<div class="row">
    <?php waterstreet_fetch_page(\'page-3\'); ?>
</div>
欢迎咨询!谢谢

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

如何简化你的生活

我会走一条相当简单的路线:

添加“主/父”页面在此处应用模板将“子”页面添加到此主页面更改查询以将其包含在其中作为快速测试插件的代码示例这里有一个(未测试的)插件,它修改查询参数,不仅将其减少为单个查询,而且修改主查询,因此无需提高性能。

解释

我不确定如何在函数中检索父帖子(当前)ID。我想你必须手动设置。无论如何:尝试一下get_queried_object_id() (这可能不起作用)或查看是否可以从$query 对象您还可以将第二个过滤器附加到post_clauses 只需更改此筛选器中的参数(其中get_queried_object_id() 应已存在(或不存在)。

此函数所做的一件好事是附加orderby 值为menu_order, 因此,您可以使用默认情况下page post类型支持的内容。在我看来,您应该尽可能多地利用core提供的功能。

<?php
/** Plugin Name: (#70317) »kaiser« Fetch all child posts */
/**
 * Calls the child pages
 * 
 * @param  object $query
 * @return object $query
 */
function wpse70317_pre_get_posts( $query )
{
    if (
        ! $query->is_home()
        OR ! $query->is_front_page()
        OR ! $query->is_main_query()
        )
    {
        return $query;
    }

    $query->set( \'post_type\', \'page\' );
    $query->set( \'post_status\', \'inherit\' );

    // Allow the menu order (meta value) to be used
    // ... and start with 0 and count up
    $query->set( \'order\', \'ASC\' );
    $query->set( \'orderby\', \'menu_order\' );

    // Change this to your parent posts ID
    $query->set( \'post_parent\', 1 );

    return $query;
}
add_action( \'pre_get_posts\', \'wpse70317_pre_get_posts\' );

SO网友:Parham

如果将页段塞替换为其ID,则可以在单个查询中使用“post\\uu in”查询参数和“page”作为post\\u类型:

<?php

$args = array( \'post_type\' => \'page\', \'post__in\' => array(2, 3, 5)); 

$the_query = new WP_Query( $args );

// The Loop
if ( $the_query->have_posts() ) :
while ( $the_query->have_posts() ) : $the_query->the_post();
  get_template_part(\'content\');
endwhile;
endif;

?>

结束

相关推荐

Add Field To All Pages

我正在尝试向内置页面内容类型添加自定义字段。我找到了很多关于如何在单个页面上执行此操作的教程,但我想在我的主题中的所有页面上执行此操作。请给我指出正确的方向。