SimplePie:按项目值和项目数进行筛选


SimplePie: filter by item value and number of items

基本上,我只想使用of语句过滤来自具有特定类别的各种提要的项目,并且只显示6个项目。我可以成功地做任何一件事,但不能同时做这两件事。我试图首先根据类别筛选项目,然后将这些项目的数量限制为六个,或者任何设置。代码如下(它的作用正好相反,我不明白如何用另一种方法)。希望有人帮忙。非常感谢!

<?php 
 require_once('simplepie131.inc');
    $feed = new SimplePie();
    $feed->set_feed_url(array(
    'http://site1.com/rss',
    'http://site2.com/rss',
    'http://site3.com/rss',
    ));

    $feed->enable_cache(true);
    $feed->set_cache_location('cache');
    $feed->set_cache_duration(1800);
    $feed->init();
    $feed->handle_content_type();

include('header.php'); 
?>

<h1>Title</h1>
<?php 
foreach ($feed->get_items(0, 6) as $item): 

 ?>
    <?php
     if(    $item->get_category()->get_label() == 'category1' 
        or  $item->get_category()->get_label() == 'category2' 
        or  $item->get_category()->get_label() == 'category4' 
        ):
    ?>
<div>   
    <h2><a href="<?php echo $item->get_permalink();  ?>"><?php echo $item->get_title();?></a></h2>

    <img src="<?php echo $item->get_description(); ?>" />
    <img src="<?php echo $item->get_feed()->get_image_url(); ?>" />
    <?php 
    echo $item->get_feed()->get_title();
    echo $item->get_category()->get_label();
    echo $item->get_date('d.m.Y | H:i');
    ?>
</div> <!-- end div --> 

    <?php endif;?>


<?php endforeach; ?>

您正在运行的问题是,您将结果限制在前6篇文章中,然后试图在6个项目的循环中完成您的条件。你需要做的是手动计算通过你的条件允许的文章数量,然后在达到6篇时退出。

<?php 
$counter = 0;
foreach ($feed->get_items() as $item): 
     if( $item->get_category()->get_label() == 'category1' 
         or  $item->get_category()->get_label() == 'category2' 
         or  $item->get_category()->get_label() == 'category4' 
       ):
        $counter++;  // increment your counter
    ?>
<div>   
    <h2><a href="<?php echo $item->get_permalink();  ?>"><?php echo $item->get_title();?></a></h2>

    <img src="<?php echo $item->get_description(); ?>" />
    <img src="<?php echo $item->get_feed()->get_image_url(); ?>" />
    <?php 
    echo $item->get_feed()->get_title();
    echo $item->get_category()->get_label();
    echo $item->get_date('d.m.Y | H:i');
    ?>
</div> <!-- end div --> 
    <?php endif;?>
<?php if ($counter >= 6) break; // break out of the foreach loop ?>
<?php endforeach; ?>