我有使用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表中获取数据,或者我需要为此创建一个新类?
答案 0 :(得分:8)
对于现在阅读此内容的任何人,您可以使用以下代码检索postmeta值:
<?php echo $post->getMetaValue('your_meta_key') ?>
同样的方法可以用于任何具有元表的帖子(帖子,页面,评论,用户等)
答案 1 :(得分: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');
我想这不是最好的方法,但是如果你变得更好,请告诉我。