我想在主页上查询我的大部分页面和类别。到目前为止,我能够获得页面和类别(帖子),但我无法按我想要的方式排列列表。我想能够获得一个自定义的顺序,如页面、一个类别的帖子、另一个页面和另一个类别的帖子。
我正在使用以下内容:
<?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服务器带来负担。我想尽量节省内存。
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 ?>
是的,我需要重置查询!