按分类/分类下级自定义顺序查询公告

时间:2011-03-31 作者:salocin

这是一个持续的请求,试图最大化一些代码,以按国家、特定类型和特定区域显示住宿列表。

例如,法国所有住宿的列表,按酒店评级(1,2,3,4,5),然后按地区(巴黎、马赛等)列表将为

-酒店1星级—马赛—酒店1号—酒店2号—巴黎—酒店1号—酒店2号

-酒店2Star等。。等

每个酒店入口都有一个名为“住宿”的自定义贴子。我有3个分类,国家(即法国)、住宿类型(即酒店1星级)、地区(即巴黎)。

在国家页面上列出住宿“生活”,因此国家的价值已经知道。(即$termcountry->名称)

我的代码如下:

            $taxonomy2 = \'accomodation-type\';
        $termsacc = get_terms("accomodation-type",array(\'orderby\' => \'slug\', \'order\' => \'ASC\'));

        foreach ($termsacc as $termaccomodation) {
            $taxonomyregion = \'region\';
            $termsreg = get_terms("region",array(\'orderby\' => \'slug\', \'order\' => \'ASC\'));
             foreach ($termsreg as $termregion) {

             $query = array(
              \'post_type\' => \'accomodation\',
              \'accomodation-type\' =>$termaccomodation->name,
              \'country\' =>$termcountry->name, 
              \'orderby\' => \'title\', 
              \'order\' => \'ASC\',
              \'posts_per_page\' => 48,                 
              \'tax_query\' => array(
              array(
                    \'taxonomy\' => $taxonomyregion,
                    \'field\' => \'slug\',
                    \'terms\' => $termregion->name,
                    \'orderby\' => \'title\', 
                    \'order\' => \'ASC\',
                    )
                  )

              );

            query_posts($query);

             $count = 1; //First we set the count to be zeo    
             if(have_posts() ) {  
             $termaccomodation->slug = str_replace("%e2%80%98", "", $termaccomodation->slug);
             $termaccomodation->slug = str_replace("%e2%80%99", "", $termaccomodation->slug);

             if($termregion->name=="General"){
              $regionname = "";
             }else{
              $regionname = " - ".$termregion->name;
             }
             $id = \'\';
             $new_id = ++ $id;
             ?> 
             <a name="<?php echo   $new_id."-".$termaccomodation->slug."-".$termregion->slug;?>"></a>
             <div id="accitem">
                <?php echo "<h3>".$termaccomodation->name."".$regionname."</h3>";?>

             <?
             while (have_posts()) : the_post();
             $linkacc = get_custom_field("AccomodationLink");
             ?>
             I do my loop stuff and display the accom list.
             then close my loop
             <?php endwhile; wp_reset_query();?>
这是可行的,但真的很慢。。。我很确定这不是最好的方式。我可以请教你一下吗?帮助

干杯

1 个回复
SO网友:Scott

在这里一点一点地回答,并将添加我看到的任何优化:

1) $termsreg = get_terms("region",array(\'orderby\' => \'slug\', \'order\' => \'ASC\')); 可以在foreach循环上方运行。无需运行多次。

2) 您的自定义贴子类型中的“所有”酒店是否都列在本页的某个位置?如果在这个双循环过程中,您的所有酒店至少显示一次,那么最好先将您的所有酒店与它们所属的税务一起加载到一个数组中。然后在foreach中对照您已经收到的数据进行检查,然后显示酒店,而不是每次都从DB中获取数据。首先,要获取酒店数据,我需要做的是自定义SQL查询,以确保我只提取了所需的数据,并提取了两个相关的税务数据。

这就是我现在想到的。

结束

相关推荐

Saving Taxonomy Terms

我有一个有趣的问题,希望有人能尽快回答。我已经创建了自己的metabox,它基于“我的metabox代码”(下面的列表)正确地显示了我创建的“event\\u types”分类中所有术语的下拉列表。我遇到的问题是,当从下拉列表中选择不同的术语并更新帖子时,能够保存/更新与帖子相关的术语。在对各种代码位进行修补之后,我发现通过手动将term\\u ID number[用逗号分隔]输入数组区域,我得到了我想要的结果。例如,如果在保存帖子时,函数将调用此代码wp_set_post_terms( $post_id