我有Wordpress CPT和ACF的事件,它们有一个publish_date
(内置(,当它们应该出现在新闻中时,还有一个start_date
(这是自定义字段(显示在列表中并在一种日历中排序。
这是我的代码:
public function getEventsCollection()
{
$collection = Mage::getResourceModel('wordpress/post_collection');
$collection->addPostTypeFilter('events');
$collection->setOrderByPostDate();
$collection->addIsViewableFilter();
$collection->setPageSize(20);
$collection->load();
return $collection;
}
我只能找到setOrderByPostDate()
,但没有其他方法可以在自定义字段start_date
上为后期收集设置顺序。
start_date
和publish_date
是相互独立的,有些事件可能会比其他事件更早宣布。
我已经试过了
$collection->setOrder('start_date');
但是我会得到一个SQL错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'start_date' in 'order clause', query was: SELECT...
自定义字段"start_date"不是查询的一部分,因此不能用于排序。您可以像这样调试查询:
<?php echo $collection->getSelect() ?>
如果您查看Fishpig_Wordpress的抽象集合文件(app/code/community/Fishpig/Wordpress/Model/Resource/Collection/Abstract.php(,您将看到以下可能对您有用的方法:
public function resetOrderBy();
public function addMetaFieldToSelect($metaKey);
public function addMetaFieldToFilter($metaKey, $filter);
public function addMetaFieldToSort($field, $dir = 'asc');
如果您只想按字段排序,addMetaFieldToSort 看起来像正确的选择,但是如果您检查代码,此方法实际上并没有加入字段,因此这不起作用。您可以执行以下操作:
<?php $collection->resetOrderBy() ?>
<?php $collection->addMetaFieldToSelect('start_date') ?>
<?php $collection->addMetaFieldToSort('start_date', 'desc') ?>