2

我有带有 Fishpig_Wordpress 模块的 Magento。我为帖子创建了一些新的 postmeta 数据,这些数据保存在postmeta表中。刚刚看到Fishpig在/Model/Mysql4/Post.php中有一个自定义的加载SQL方法。。

protected function _getLoadSelect($field, $value, $object)
{
    $select = $this->_getReadAdapter()->select()
        ->from(array('e' => $this->getMainTable()))
        ->where("e.{$field}=?", $value);

    if (Mage::getDesign()->getArea() == 'frontend') {
        if (Mage::helper('wordpress/plugin_allInOneSeo')->isEnabled()) {
            foreach(Mage::helper('wordpress/plugin_allInOneSeo')->getMetaFields() as $field) {
                $table = 'aioseop_'.$field;
                $select->joinLeft(
                    array($table => Mage::helper('wordpress/db')->getTableName('postmeta')), 
                    "{$table}.post_id = e.ID AND ".$this->_getReadAdapter()->quoteInto("{$table}.meta_key=?", "_aioseop_{$field}"),
                    array('meta_'.$field => 'meta_value')
                );
            }
        }
    }

    $select->limit(1);

    return $select;
}

这在 joinLeft 方法中使用Mage::helper('wordpress/db')->getTableName('postmeta') 。但我不知道应该如何使用 _getLoadSelect 保护方法或创建另一个类来调用 postmeta 表。

所以,问题是: 有没有办法使用 Fishpix 模块从 postmeta 表中获取数据,或者我需要为此创建一个新类?

4

2 回答 2

8

对于现在阅读本文的任何人,您都可以使用以下代码检索 postmeta 值:

<?php echo $post->getMetaValue('your_meta_key') ?>

同样的方法可用于任何具有元表(帖子、页面、评论、用户等)的 WordPress 实体

于 2013-06-26T11:21:23.043 回答
3

我通过映射 config.xml 下的 postmeta 表解决了上述问题,如下所示:

<entities>
    ...
    <post_meta>
        <table>postmeta</table> 
    </post_meta>
</entities>

通过在 Fishpig/Wordpress/Model/Post.php 下创建一个新方法:

public function getPostMeta(Fishpig_Wordpress_Model_Post $post, $meta_key)
{
    if($post->getId() == '')
        return '';

    $table =  Mage::helper('wordpress/db')->getTableName('postmeta');
    $resource = Mage::getSingleton('core/resource');
    $readConnection = $resource->getConnection('core_read');

    $query = "SELECT meta_value FROM {$table} WHERE post_id = 0" . $post->getId() . " AND meta_key = '" . $meta_key . "'";

    return $readConnection->fetchOne($query);
}

所以我可以通过调用在前端使用它:

Mage::getModel('wordpress/post')->getPostMeta($post,'facebook');

我想这不是最好的方法,但如果你有更好的方法,请告诉我。

于 2012-07-03T19:46:10.083 回答