我发现了几乎相同的问题:https://stackoverflow.com/questions/4796165/multiple-loops-in-wordpress-second-loop-not-resetting 但这个答案对我不适用。
我有“公文包”的帖子类型,我正在处理显示所有公文包项目的小部件。
此代码在页面公文包上非常有效:
$loop = new WP_Query( array(
\'post_type\' => \'portfolio\',
\'posts_per_page\' => 5 ) );
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
(...)
<?endwhile?>
但当我在我的小部件中实现这一点时,“post\\u type”字段似乎不起作用。无论我键入什么样的帖子类型,它总是显示帖子而不是公文包项目。即使帖子类型根本不存在(我们都知道,如果没有这样的帖子类型,它应该什么也不显示!)。
我相信除了我的小部件之外,还有一个blog部分(loop.php中的循环,没有代码显示,因为只有“while(have\\u posts()):the\\u post();”)
[编辑]
我可能错了,从循环中删除了每一行代码。php和我的小部件仍然显示帖子。
有没有办法解决这个问题?
[编辑#2]
好的,我的网站看起来就像每个普通的Wordpress博客:
header.php
loop.php > widget area
footer.php
页眉和页脚中几乎没有PHP代码(至少没有循环等)。
循环。php也是正常的:
<?php if ( ! have_posts() ) : ?>
(...)
<?php endif; ?>
<?php while ( have_posts() ) : the_post(); ?>
(...)
<?php endwhile; ?>
事实上,小部件也不是很独特:
function myWidgetName_load_widgets() {
register_widget( \'myWidgetName\' );
}
class myWidgetName extends WP_Widget {
function myWidgetName() {
(...)
}
function widget( $args, $instance ) {
extract( $args );
$title = apply_filters(\'widget_title\', $instance[\'title\'] );
$number = $instance[\'number\'];
echo $before_widget;
if ( $title )
echo $before_title . $title . $after_title;
if ( $number )
echo "<ul>"; ?>
<?php
$loopWithSuperUniqueName = new WP_Query( array(
\'post_type\' => \'anything\', /* and this doesn\'t work */
\'posts_per_page\' => 15 ) );
?>
<?php while ( $loopWithSuperUniqueName->have_posts() ) : $loopWithSuperUniqueName->the_post(); ?>
<p><?php the_title(); ?></p> /* it always displays POSTS even if \'post_type\' => \'alalaaolbadiobladaWhathever\' */
<?php endwhile; ?>
<?php echo "</ul>"; ?>
<?php
echo $after_widget;
}
function update( $new_instance, $old_instance ) {
(...)
}
function form( $instance ) {
(...)
}
etc.
这个小部件的代码还可以,因为我已经开发了一些类似的小部件,它们都可以工作。
我开始觉得Wordpress有问题,不是我的代码。