我正在研究一种从Wordpress数据库中提取内容并以不同方式处理它的工具。我所做的一件事就是构建一个名为$category
的简单数组,其中包含wp_terms where term_id = <what the user picked>
的内容。
不幸的是,它并不包含我想要的所有内容,因此我还使用$category->taxonomy
中的相关详细信息填充了wp_term_taxonomy where term_id = <what the user picked>
。这是一对一的关系,所以没有问题。
但是,我在wp_termsmeta
中也得到了一些我需要的东西,其中多条线的一对多关系具有相同的term_id
。所以我得到的是这样的:
{
"term_id" : 9813,
"name" : "Who's Who",
"slug" : "ww",
"term_group" : 0,
"taxonomy" :
{
"term_taxonomy_id" : 9832,
"term_id" : 9813,
"taxonomy" : "category",
"description" : "Who's Who is the CSICON Network's very own show about Doctor Who!",
"parent" : 0,
"count" : 58
},
"meta" : [
{
"meta_id" : 8490,
"terms_id" : 9813,
"meta_key" : "hosts",
"meta_value" : "1, 2"
},
{
"meta_id" : 8492,
"terms_id" : 9813,
"meta_key" : "thumbnail",
"meta_value" : "http://csicon.fm/wp-content/uploads/2015/12/ww_4-248x248.jpg"
}
]
}
我们term_id
中的name
已slug
,term_group
,wp_terms
和$category
,然后是一堆内容$category->taxonomy
以及$category->meta
下的一堆内容。
现在问题。
如果我想访问缩略图网址,我将不得不遍历$category->meta[1]->meta_value
,但我不能总是知道它将是[1]
。对于其他类别,可能是[0]
或[2]
。我确切知道的是,[n]
是meta_key = thumbnail
。
理想情况下,我希望有一种好方法来遍历meta
,只需将每个meta_key
的值保存为$category
下的“真实”密钥,因此$category->thumbnail
会返回当前存储在那里的meta_value
...但我会以一种可靠的方式解决,始终为特定的meta_value
找到合适的meta_key
。
有什么想法? :)
解决
谢谢!而不是$category['meta'] = Category::find($term_id)->catMeta;
,我现在正在运行以下代码,它完全符合我的要求。
$metaTemp = Category::find($term_id)->catMeta;
$metaTable = json_decode(json_encode($metaTemp), FALSE);
foreach($metaTable as $key => $value) {
$category[$value->meta_key] = $value->meta_value;
}
答案 0 :(得分:1)
我建议将meta从数组转换为对象的属性,该对象的属性将是meta_keys。所以你得到这个结构:
{
"term_id" : 9813,
"meta" : {
"hosts" : {
"meta_id" : 8490,
"terms_id" : 9813,
"meta_key" : "hosts",
"meta_value" : "1, 2"
},
"thumbnail" : {
"meta_id" : 8492,
"terms_id" : 9813,
"meta_key" : "thumbnail",
"meta_value" : "http://csicon.fm/wp-content/uploads/2015/12/ww_4-248x248.jpg"
}
}
}
因此,搜索正确的元数据会在时间上产生不变的成本,而不是线性的。
您的客户会像这样搜索它:$category->meta->hosts
答案 1 :(得分:0)
谢谢!而不是$category['meta'] = Category::find($term_id)->catMeta;
,我现在正在运行以下代码,它完全符合我的要求。
$metaTemp = Category::find($term_id)->catMeta;
$metaTable = json_decode(json_encode($metaTemp), FALSE);
foreach($metaTable as $key => $value) {
$category[$value->meta_key] = $value->meta_value;
}