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 に答える