好的,这些年来我已经做了很多主题,并且写了很多查询。我刚刚意识到,我显然不知道如何让多个查询正常运行。这是我索引中的循环。php:
<?php do_action( \'voodoo_pre_loop\' ); ?>
<?php if( is_home() ) : ?>
<?php $args = array(
\'posts_per_page\' => 1,
\'post__in\' => get_option( \'sticky_posts\' ),
\'ignore_sticky_posts\' => 1
);
$my_query = new WP_Query( $args );
while ($my_query->have_posts()) : $my_query->the_post();
$do_not_duplicate = $post->ID; ?>
<?php get_template_part( \'content\', \'featured\' ); ?>
<?php endwhile; ?>
<?php if ( is_active_sidebar( \'sidebar-2\' ) ) : ?>
<?php dynamic_sidebar( \'sidebar-2\' ); ?>
<?php endif; ?>
<?php $paged = get_query_var( \'paged\' ) ? get_query_var( \'paged\' ) : 1;
$more_args = array(
\'posts_per_page\' => 9,
\'post__not_in\' => get_option( \'sticky_posts\' ),
\'paged\' => $paged
);
query_posts( $more_args ); ?>
<?php endif; ?>
<?php if ( have_posts() ) : ?>
<?php voodoo_content_nav( \'nav-above\' ); ?>
<?php while ( have_posts() ) : the_post();
if( $post->ID == $do_not_duplicate ) continue; ?>
<?php $format = get_post_format();
if ( false === $format )
$format = \'standard\';
get_template_part( \'content\', $format ); ?>
<?php endwhile; ?>
<?php voodoo_content_nav( \'nav-below\' ); ?>
<?php else : ?>
<?php voodoo_else(); ?>
<?php endif; ?>
所以,我所期望的是有一个循环。它只会抓住一个帖子。如果有粘性的,我们会抓住它。如果没有,那么是最近的帖子。这将始终扩展到显示的特色内容。这个循环似乎有效。我有一根棍子,如果没有的话就没有。并调用所选内容。这一切都在is\\U主页上,因为我只希望它出现在主页/首页上。
仍然在is\\U主页中的是一个小部件区域。这并不复杂。
接下来是第二个循环。根据我的逻辑,查询仍在is\\U主页中。在头版上,我想要9篇帖子,从来没有任何粘性,没有第一篇帖子的副本。在随后的页面上,我想我不需要那个查询。我只想让所有其他页面都显示我的标准10篇帖子。没有特色的东西,没有侧边栏等。
因此,这似乎让我想起了第一篇帖子、小部件和一团混乱。
在第二个领域,我只有7个帖子。在随后的页面中,我仍然会看到我不想要的第一个特色循环。我只有8个帖子。我在互联网上读了很多书,显然我没有掌握什么东西。
任何想法:为什么is\\U主页或is\\U首页在这里不起作用?为什么我的数字不正确?(1+9个帖子是主页,剩余10个帖子)
我想在这里得到一些帮助,这样我就能更好地理解这一切。谢谢
最合适的回答,由SO网友:Johannes Pille 整理而成
应使用重置第一个查询wp_reset_postdata()
循环完成后,以避免与主查询冲突。浏览一下您的代码,这是我看到的最重要的缺陷。
还有,我会用$my_query_2 = new WP_Query( $more_args );
对于第二个问题,我不明白为什么恢复使用query_posts()
. This 可能值得一读。
虽然这样做了:它不应该影响代码的功能,但为什么会有这么多php开始和结束标记(即。<?php
和?>
) ? 如果中间有HTML标记并且不喜欢回音,那么这可能是有道理的,但如果不是这样的话,只需<?php
在文件顶部(或相关章节),以及?>
在底部。它将为您自己以及帮助您的人提供更清晰的代码。
EDIT: 姆凯。这在我的dev安装上正常工作:
<ul>
<?php
$per_page = is_paged() ? 10 : 9;
$stickies = get_option( \'sticky_posts\' );
$offset = empty( $stickies ) ? 1 : 0;
if( is_home() && !is_paged() ) {
$per_page = 9;
$args_first_query = array(
\'posts_per_page\' => 1,
\'post__in\' => $stickies,
\'ignore_sticky_posts\' => 1
);
$first_query = new WP_Query( $args_first_query );
if( $first_query->have_posts() ) {
while ($first_query->have_posts()) : $first_query->the_post();
// replace with your template part:
echo \'<li>Latest Sticky:\'.get_the_title().\'</li>\';
endwhile;
}
wp_reset_postdata();
}
// your sidebar
$paged = get_query_var( \'paged\' ) ? get_query_var( \'paged\' ) : 1;
$args_main_query = array(
\'posts_per_page\' => $per_page,
\'post__not_in\' => $stickies,
\'paged\' => $paged,
\'offset\' => $offset
);
query_posts( $args_main_query );
if( have_posts() ) {
while ( have_posts()) : the_post();
$format = get_post_format();
if ( false === $format )
$format = \'standard\';
echo \'<li>\'.get_the_title().\'</li>\';
endwhile;
}
// pagination, with check for WP-PageNavi plugin
if ( function_exists(\'wp_pagenavi\') ) {
wp_pagenavi();
} elseif ( get_next_posts_link() || get_previous_posts_link() ) {
next_posts_link( \'« Older Entries\' );
previous_posts_link( \'Newer Entries »\' );
}
wp_reset_query();
?>
</ul>
我建议您检查一下上述内容是否也适用于您的网站。如果失败了,请逐个输入自定义内容,看看是否失败,如果失败了,何时失败。
此支票if( $post->ID == $do_not_duplicate ) continue;
这绝对是多余的,因为第一个查询只接受胶粘物,而第二个查询根本不接受胶粘物。因此,您可以肯定地在第一个查询中省略该行和相关行。