如何使用Wordpress的query_posts()方法显示一组组合的帖子和页面

时间:2010-10-28 02:35:27

标签: php arrays wordpress

我有一个我正在使用的模板,可以选择在特色部分的首页上显示一组帖子,或者可选地在同一个特色区域中显示一组指定的页面。我找到了它显示的代码,或者我不确定如何将两者结合在一起并获得一组帖子和页面的列表。

我的理解是query_posts()会覆盖Wordpress在页面上显示的任何项目集,因此,根据主题所处的模式,它会将参数传递给query_posts()以获取特定类别的帖子,或者传递一系列页面:

<div id="slides">
    <?php global $ids;
    $ids = array(); 

    $featured_cat = get_option('mytemplate_feat_cat'); 
    $featured_num = get_option('mytemplate_featured_num'); 

    if (get_option('mytemplate_use_pages') == 'false') query_posts("showposts=$featured_num&cat=".get_cat_ID($featured_cat));
    else {
        global $pages_number;

        if (get_option('mytemplate_feat_pages') <> '') $featured_num = count(get_option('mytemplate_feat_pages'));
        else $featured_num = $pages_number;

        query_posts(array
                        ('post_type' => 'page',
                        'orderby' => 'menu_order',
                        'order' => 'ASC',
                        'post__in' => get_option('mytemplate_feat_pages'),
                        'showposts' => $featured_num
                    ));
    } ?>
            <!-- Start my loop to display everything-->
    <?php if (have_posts()) : while (have_posts()) : the_post();
    global $post; ?>

到目前为止,我已经使它更加简洁,但是无法克服最后一点如何组合参数来说明query_posts(getMyPostsArray()。AddList(ohINeedACouplePagesToo()))//是,我知道这看起来像C#或者其他什么......我不是一个PHP家伙..

这里的代码是一个更接近我想要的更易读的版本:

            $featured_cat = get_option('mytemplate_feat_cat'); 
                //I combined featured_num to get the total number of featured items to display
        $featured_num = get_option('mytemplate_featured_num') + count(get_option('mytemplate_feat_pages'));; 

query_posts("showposts=$featured_num&cat=".get_cat_ID($featured_cat));

            //I think this second line overwrites the first query_posts() :-/
            query_posts(array
                            ('post_type' => 'page',
                            'orderby' => 'menu_order',
                            'order' => 'ASC',
                            'post__in' => get_option('mytemplate_feat_pages'),
                            'showposts' => $featured_num
                        ));

1 个答案:

答案 0 :(得分:1)

瑞安,你为什么不继续进行两个查询和两个循环?

query_posts("post_type=post&showposts=3");
while (have_posts()) { the_post(); }

query_posts(array(
    "post_type" => "page",
    "post__in" => get_option("mytemplate_feat_pages"),
    "showposts" => 5
));
while (have_posts()) { the_post(); }

如果您需要填充空间的特定数量的帖子和页面,您还可以使用$wp_query->found_posts来实际计算您拥有的内容和所需内容。这可能是最简单的解决方案,因为即使您可以在SQL中获取帖子和页面,您也可能很难订购它们,因为帖子没有菜单顺序,而您不喜欢按发布日期排序的页面

希望有所帮助, 干杯!