我有像Wordpress CPT& amp;具有publish_date
(内置)的ACF,当它们出现在新闻中时,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-Error:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'start_date' in 'order clause', query was: SELECT...
答案 0 :(得分:1)
自定义字段'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') ?>