为了让我解释为什么它只在某些页面上起作用,您需要了解 query_posts() 的实际作用。
query_posts() 修改默认的 Wordpress 循环。无论您在哪个页面上,总是有一个由核心初始化的默认循环。除非您打算修改该循环,否则您必须完全停止使用 query_posts()。
query_posts() 经常被滥用的原因有很多,并且在许多论坛以及 Wordpress Codex 本身中都有详细说明。但这涉及到与您的问题无关的领域。
首先,让我们看看您的代码在做什么:
<?php if(have_posts()):?> //If the default loop finds posts....
<?php query_posts( array( 'post_type' => 'connect' ) );?> //Modify the loop to fit these new parameters
基本上,只有在默认循环能够返回一组结果时,您的新查询才会运行。这适用于其他页面,因为默认循环通常适用于大多数情况。
它不适用于您的 Author.php 模板,因为无论出于何种原因,它都无法返回一组结果来运行您修改后的查询。
那么如何解决呢?
您需要更改结构以及调用查询的方式。我不知道您对项目的了解程度如何,如果这与客户的截止日期非常紧迫,但我的建议是放弃所有 query_posts() 调用以支持WP Query
是不是看起来有点复杂?当然。但是,将其作为任何当前和未来 Wordpress 主题的生计将最终为您节省大量时间和麻烦。
坏方法:
<?php
query_posts( array( 'post_type' => 'connect' ) );
if(have_posts()): while (have_posts()) : the_post();
?>
<div class="title"><?php the_title();?></div>
<div class="logos">
<?php the_content();?>
</div>
<?php
endwhile;
wp_reset_query();
endif;
?>
正确的方法:
<?php
$q = new WP_Query( array( 'post_type' => 'connect' ) );
if($q->have_posts()) : while($q->have_posts()) : $q->the_post;
?>
<div class="title"><?php the_title();?></div>
<div class="logos">
<?php the_content();?>
</div>
<?php
endwhile;
wp_reset_postdata();
endif;
?>
希望这会有所帮助,祝你好运。
更新:
WP_Query 确实允许您按作者查询帖子,并且您假设在新的 WP_Query 对象中提供的默认值通常会反映给定页面上的默认查询似乎是有道理的,并且可以潜在地解释您所看到的行为。
由于 WP_Query 文档并没有真正提供一种明确搜索作者类型“任何”的方法,因此我们可能不得不在这个方面有点脏:
$user_ids = get_users(array('who'=>'author', 'fields'=>'ID'));
$q = new WP_Query( array( 'post_type' => 'connect', 'author'=>implode(',', $user_ids) ) );
让我知道这是否有帮助。