是否在wp后元表上查询并获取元作为对象(StdClass)?

时间:2011-05-30 作者:Jenny

我想从Posteta表中获取一组数据。Posteta表有4列,即meta\\u id、post\\u id、meta\\u key、meta\\u value。每个post\\u id都有一个meta\\u键列表。我想运行查询并获得

arry(number of results)(
                      [0]=>object(stdClass)#1(
                                             [post_id] => 123,
                                             [key1]    => x,
                                             [key2]    => y,
                                             [key3]    => z
                                             )
                      [1]=>=>object(stdClass)#2(
                                             [post_id] => 456,
                                             [key1]    => x,
                                             [key2]    => y,
                                             [key3]    => z
                                             )
                      )
怎么做?

1 个回复
最合适的回答,由SO网友:bitwit 整理而成

最近我也在想同样的问题,这是我想到的最好的解决方案。

首先,在函数中声明一个非常简单的类。php

class Object
{
    var $data = array();

    public function __set($name, $value)
    {
        $this->data[$name] = $value;
    }

    public function __get($name)
    {
        return $this->data[$name];
    }
}
这是我们将用来存储所有内容的通用对象

接下来,我们将连接到SQL数据库并提取所需的所有数据。在本例中,我正在执行一个非常通用的查询,以选择数据库中的所有帖子,并附加它们的相关数据。如果您有一个较大的DB,您可能需要缩小此查询的范围,并在帖子中添加一些条件,例如添加:

"WHERE post.post_type = \'graph\'"
SQL查询,但我不确定您将结果缩小到什么范围,因此出于演示目的,我们将保持通用性。。。

global $wpdb;
    $query = "SELECT post.id as post_id, meta.meta_key, meta.meta_value FROM wp_posts as post LEFT JOIN wp_postmeta as meta ON post.id = meta.post_id";
    $result = $wpdb->get_results($query);
    $last_post_id = -1;
    $object_array = array();
    foreach($result as $post)
    {
        if ($last_post_id != $post->post_id)
        {
            $instance = new Object;
            $last_post_id = $post->post_id;
            $instance->post_id = $post->post_id;

            $instance->{$post->meta_key} = $post->meta_value;
            $object_array[] = $instance;
        }
        else {
            $meta_key = $post->meta_key;
            $instance->$meta_key = $post->meta_value;
        }
    }
这样做的目的是从sql中获取相对“脏”的查询,并将其组织为您上面提到的格式。最后,尝试自己打印阵列

print_r($object_array);
您会注意到,您的变量嵌入到对象中的另一个数组“data”中,但由于我们在类定义中编写了getter和setter函数,您仍然可以直接调用变量名。

i、 e。

$meta_key = "my_key";
echo $object_array[0]->$meta_key;
希望这是有用的。

结束

相关推荐

GET PHP FATAL Error on Globalized$wpdb:调用非对象上的成员函数INSERT()-我没有线索。怎么办呢?

我正在尝试利用这个功能。我不明白为什么我仍然会遇到PHP错误。我所能理解的是,由于某种原因,模板无法访问$wpdb。我不知道函数中需要放置哪一行。包含此函数的php(在主题文件夹中)文件。请帮帮我!!function submitWeightUpdate( $userid, $weight ) { global $wpdb; $result = $wpdb->insert( \'wp_weights\', array( \'user_id\' => $