如何使用Fishpig在自定义字段上设置顺序

时间:2017-06-09 16:16:48

标签: wordpress fishpig

我有像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_datepublish_date彼此独立,有些事件可能早于其他事件宣布。

我已经尝试了

$collection->setOrder('start_date');

但我会得到一个SQL-Error:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'start_date' in 'order clause', query was: SELECT...

1 个答案:

答案 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') ?>