我知道post表和term表之间有联系,但我无法理解。
wp_terms
, wp_termmeta
, wp_term_relationships
&;wp_term_taxonomy
关系有点混乱。因此,我无法编写查询来从post id获取术语id。
Actual Problem:
我使用这段代码来获取一个对象并从中提取术语id。但由于某些原因,它不起作用,所以我想在数据库中手动查询以提取术语id并执行其余过程。
get_metadata_by_mid(\'post\', $id);
它返回此对象:(
on local machine)
stdClass Object
(
[meta_id] => 1268 //this id is passed to function like get_metadata_by_mid(\'post\', 1268);
[post_id] => 222 //want to obtain this ID
[meta_key] => _menu_item_url
[meta_value] =>
)
不返回结果(
on server) [所以在寻找替代方法]
NOTE:
get_metadata_by_mid
可以在本地计算机上工作,但不能在live上工作(我不知道,为什么我在两种环境中都有相同的版本)- 如果有人可以提供替代方法,那么它将比手动查询更好
最合适的回答,由SO网友:Atlas_Gondal 整理而成
如果您已经内置了函数,但需要使用查询,那么使用查询并不是一种好的做法。
Try this solution:
global $wpdb;
$meta = $wpdb->get_row( "SELECT * FROM `wp_postmeta` WHERE `meta_id` = $id" );
//will return same object like returned by get_metadata_by_mid() function
print_r($meta);
Debugging Technique:
正如你提到的,
get_metadata_by_mid()
无法在live server上运行。我会说,
选择任何帖子id(用于测试)
登录到phpmyadmin
运行此搜索查询SELECT * FROM `wp_postmeta` WHERE `meta_id` = ID_GOES_HERE
//copy post_id from the results
运行此查询SELECT * FROM `wp_terms` WHERE `term_id` = POST_ID_GOES_HERE
尝试在两台(本地和实时)服务器上匹配该进程。希望它能帮助您发现问题。