不客气,但你错过了这里的一切
首先,你不应该使用query_posts
构造自定义查询。这不仅是我的重点,也是抄本。最大的问题是query_posts
在许多情况下,分页都会失败
Note: 此功能不适用于插件或主题。如后文所述,有更好、性能更好的选项来更改主查询。query\\u posts()是一种过于简单且有问题的方法,通过将页面的主查询替换为新的查询实例来修改它。它效率低下(重新运行SQL查询),并且在某些情况下会彻底失败(尤其是在处理POST分页时)。
其次,你在主页上,我相信默认情况下这只是一个正常的主页。为什么要运行不必要的自定义查询,而只需使用主查询并使用pre_get_posts
. 它速度更快,而且不需要进行任何额外的db查询。
综上所述,回到默认循环,应该是
<?php
if(have_posts()) :
while(have_posts()) : the_post();
get_template_part( \'content\', get_post_format() );
endwhile;
else :
?>
<div class="page-info">
<h1 style="font-family: <?php echo $options[\'heading_choise\']; ?>"><?php _e(\'No items found\', \'persona\') ?></h1>
</div>
<?php
endif;
?>
更换所有部件。然后在函数中使用以下内容。php
function posts_on_homepage( $query ) {
$args = array(
\'public\' => true,
\'_builtin\' => false
);
$post_types = get_post_types( $args );
if ( $query->is_main_query() && $query->is_home()) {
$query->set( \'post_type\', $post_types );
}
}
add_action( \'pre_get_posts\', \'posts_on_homepage\' );
EDIT 1
我只想在这里添加一些额外的信息,纯粹是为了提供信息。晚餐正在等着,他急着发帖:-)
我只想回到您的代码,如果将debug设置为true,您就会看到这些问题
$post_type
只生活在你的foreach
环您所做的是关闭foreach
在循环之前,所以当您将其添加到query_posts
参数,$post_type
已经不存在了。因此,您现在将一个未定义的变量传递给query_posts
, 导致查询失败,您会收到“找不到项目”消息
您应该在foreach
循环以使查询工作。只要你在foreach
环$post_type
存在并将有效值传递给自定义查询
EDIT 2 and 3 SCRAPPED
EDIT 4
似乎您可能已经设置了头版,正如您所说,我的代码不起作用。如果你有头版,那么
pre_get_posts
行不通。在这里,您需要运行自定义查询。使用
WP_Query
这样做。将您的查询更改为
<?php
$args = array(
\'public\' => true,
\'_builtin\' => false
);
$post_types = get_post_types( $args );
$query = new WP_Query(array(\'post_type\' => $post_types ));
if($query->have_posts()) :
while($query->have_posts()) : $query->the_post();
get_template_part( \'content\', get_post_format() );
endwhile;
wp_reset_postdata();
else :
?>
<div class="page-info">
<h1 style="font-family: <?php echo $options[\'heading_choise\']; ?>"><?php _e(\'No items found\', \'persona\') ?></h1>
</div>
<?php
endif;
?>