SimplePie does an explicit check of each item in SimplePie::merge_items() to determine if any item is missing a date.
You will have to override this method to change sorting behavior for multifeeds. Below is an override to sort multifeeds even when items are missing a date. If the item is missing a date, it is sorted to the bottom. (using SimplePie 1.3).
class SimplePieAlwaysSort extends SimplePie
{
public function get_items($start = 0, $end = 0)
{
if (!isset($this->data['items']))
{
if (!empty($this->multifeed_objects))
{
$this->data['items'] = self::merge_items($this->multifeed_objects, $start, $end, $this->item_limit);
}
}
return parent::get_items($start, $end);
}
public static function merge_items($urls, $start = 0, $end = 0, $limit = 0)
{
if (is_array($urls) && sizeof($urls) > 0)
{
$items = array();
foreach ($urls as $arg)
{
if ($arg instanceof SimplePie)
{
$items = array_merge($items, $arg->get_items(0, $limit));
}
else
{
trigger_error('Arguments must be SimplePie objects', E_USER_WARNING);
}
}
usort($items, array(get_class($urls[0]), 'sort_items'));
if ($end === 0)
{
return array_slice($items, $start);
}
else
{
return array_slice($items, $start, $end);
}
}
else
{
trigger_error('Cannot merge zero SimplePie objects', E_USER_WARNING);
return array();
}
}
}
$pie = new SimplePieAlwaysSort();
$pie->set_feed_url(array('http://stackoverflow.com/feeds'));
$pie->init();
foreach ($pie->get_items() as $item)
{
// do stuff
}