如何在同一查询中按ID或名称对页面和类别进行排序?

时间:2014-07-22 作者:cmsdeployed

我想在主页上查询我的大部分页面和类别。到目前为止,我能够获得页面和类别(帖子),但我无法按我想要的方式排列列表。我想能够获得一个自定义的顺序,如页面、一个类别的帖子、另一个页面和另一个类别的帖子。

我正在使用以下内容:

        <?php
        $args = array( 
            \'cat\' => $current,
            \'post_type\' => array( 
                \'page\', \'post\'),
            \'orderby\' => \'ID\' && array(2,4,1),
        );
        query_posts( $args );
        while ( have_posts()) : the_post(); ?>
            <?php // Include the page content template.
            if ( is_page() ):
                get_template_part( \'content\', \'page\' );
            else:
                get_template_part( \'content\', \'post\' );
            endif;
            ?>
        <?php endwhile;
         ?>
顺便说一下,我使用的是Twenty14,我不想对该作业进行多次查询,除非它不会给web服务器带来负担。我想尽量节省内存。

2 个回复
SO网友:Pieter Goosen

首先,不要使用query_posts, 曾经我的重点。它完全不是用来使用的,应该在将来的wordpress版本中删除。总体性能方面,我认为这比自定义查询更糟糕。你真的应该使用WP_Query 对于手头的任务

Note: 此功能不适用于插件或主题。如后文所述,有更好、性能更好的选项来更改主查询。query\\u posts()是一种过于简单且有问题的方法,通过将页面的主查询替换为新的查询实例来修改它。它效率低下(重新运行SQL查询),并且在某些情况下会彻底失败(尤其是在处理POST分页时)。

不幸的是,您不能在一个查询中执行此操作,因为您不能在循环中排序,而且也没有本机orderby 在wordpress中执行此操作。顺便说一句,您使用orderby 不正确。看看orderby 中的参数WP_Query

您需要运行至少两个,甚至更多的自定义查询,以实现所需的功能。一旦你有了这些查询,它们就必须被合并,这才是你真正头疼的地方。

如果需要分页,不幸的是这将变得非常复杂。

我不认为这是一个真正需要回答的问题,因为它会涉及很多编码等。我不喜欢以这种方式回答问题,但最好聘请一位专业人士来帮助你。此外,您必须亲自进行研究,并测试一些代码,看看哪些代码有效,哪些代码无效。

SO网友:cmsdeployed

谢谢你之前的回答。可能有误会。我不认为你的评论是粗鲁的,我的也不是故意的。无论如何我能够提出以下问题。我正在查询页面内的类别。不知道这是否真的是正确的方式,但它对我有效。我还需要做更多的挖掘来清理,看看是否有任何负面影响。但到目前为止,我得到了我所需要的东西,通过额外的调整,我将能够像我需要的那样设计我的页面和类别。

                <?php
    $pages = get_pages(array (
        \'post_type\' => \'page\',
        \'sort_column\' => \'menu_order\',
        ));
    foreach ($pages as $page) {
        $apage = $page->post_name; ?>
                <?php if ( $apage ==\'about\') { ?>
                <article id="<?php echo $page->post_name; ?>">
                    <header class="entry-header">
                        <?php if (  (function_exists(\'has_post_thumbnail\')) && (has_post_thumbnail())  ) { the_post_thumbnail(); } ?>
                        <h2 class="entry-title"><?php echo $page->post_title; ?></h2>
                    </header>
                    <div class="entry-summary"><?php echo apply_filters(\'the_content\', $page->post_content); ?></div>
                </article>

 <!-- ## Now Hold the pages query to introduce the categories ## -->

                <?php
                // get all the categories from the database
                $cats = get_categories(); 

                // loop through the categries
                foreach ($cats as $cat) {
                    // setup the cateogory ID
                    $cat_id= $cat->term_id;
                    // Make a header for the cateogry
                    /* if ( in_category(\'reviews\') ) : */
                    echo \'<header class="entry-header">\'.$cat->name.\'</header>\';
                    // create a custom wordpress query
                    $args = array(\'cat=$cat_id&posts_per_page=5\');
                    $the_query = new WP_Query( $args );
                    // start the wordpress loop!
                    if ($the_query->have_posts()) : 
                        while ($the_query->have_posts()) : 
                            $the_query->the_post();
                            // create our link now that the post is setup ?>
                <?php if ( (in_category(\'reviews\')) /*& ( category_slug == \'reviews\' )*/ ) : ?> 
                <article id="cat-reviews">
                    <header class="entry-header">
                        <?php if (  (function_exists(\'has_post_thumbnail\')) && (has_post_thumbnail())  ) { the_post_thumbnail(); } ?>
                        <h2 class="entry-title"><?php the_title(); ?></h2>
                    </header>
                    <div class="entry-summary"><?php the_excerpt(); ?></div>
                    </article><!-- #cat-reviews -->

                    <!-- ## More if categories as needed ## -->

                    <?php endif; ?>
                <?php
                        endwhile;
                    endif; // done our categories loop.
                    /* endif; // done specific category */
                } // done the foreach statement

                /* 
                 * getting back to our page query 
                 */

            } elseif ( $apage ==\'contact\') { ?>
                <article id="<?php echo $page->post_name; ?>">
                    <header class="entry-header">
                        <h2 class="entry-title"><?php echo $page->post_title; ?></h2>
                    </header>
                    <div class="entry-summary"><?php echo apply_filters(\'the_content\', $page->post_content); ?></div>
                </article>

            <!-- ## More if pages as needed ## -->

                <?php } // end if
            } // end foreach ?>
是的,我需要重置查询!

结束

相关推荐

尝试按自定义字段‘Order’排序和显示类别(而不是帖子)

我是WordPress的新手。我在“类别”分类法中添加了一个自定义字段。自定义字段是“custom\\u order”,其目的是保存一个数字,以便我的类别可以按照我选择的顺序进行排序和显示。我的问题是我无法让他们分类;我可以显示类别,以及“echo”每个类别的“custom\\u order”编号,但在访问和排序meta\\u值时,我肯定遗漏了一些东西。我也不确定我的做法是否正确。以下是我将字段添加到“新建类别”页面的代码:<?php function taxonomy_add_new_me