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

How to set order on custom field with Fishpig

我有 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(),但没有其他方法可以在 post 集合的自定义字段 start_date 上设置顺序。

start_datepublish_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') ?>