POST_TYPE不适用于小工具吗?

时间:2011-02-22 作者:Wordpressor

我发现了几乎相同的问题: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有问题,不是我的代码。

2 个回复
最合适的回答,由SO网友:wyrfel 整理而成

听起来您的小部件出于某种原因引用了全局$循环。我想这可能是由于Widget类的内部结构或其他插件的干扰。

作为第一步,为了安全起见,请尝试使用不同的变量名。全局循环称为$循环,只需将您的循环重命名为$myloop,就可以避免全局和本地之间的任何混淆。

其次,如果问题仍然存在,请在“页面”类型的页面上测试小部件。或任何其他“单一”页面。现在是否只显示一行?

SO网友:user3160044

我可以使用wp\\u reset\\u query()解决这个问题;

在小部件的开头

结束

相关推荐

Paging in a sidebar mini loop

我切换到了另一个主题,并决定用其中的一些默认代码制作一个小部件,在自定义循环中显示我的美味帖子、推特帖子、su帖子和youtube视频(不包括主循环中的这些类别)。但是现在。。。分页不再工作。我制作了这个小部件:// =============================== EDL Sidebar Posts Widget ====================================== class SidebarPosts extends WP_Widget { &#x