是否使用帖子ID查询以获取术语ID?

时间:2017-12-07 作者:Alena

我知道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上工作(我不知道,为什么我在两种环境中都有相同的版本)
  • 如果有人可以提供替代方法,那么它将比手动查询更好

3 个回复
最合适的回答,由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
    
  • 尝试在两台(本地和实时)服务器上匹配该进程。希望它能帮助您发现问题。

    SO网友:HU ist Sebastian

    我不知道你想完成什么。

    似乎您正在尝试获取与帖子关联的术语,但函数get\\u metadata\\u by\\u mid会获取元数据。

    如果您确实试图获取与特定帖子相关的所有术语,则可以使用函数wp_get_object_termswp_get_post_terms.

    如果您正在尝试做其他事情,请重申您的问题,以便更好地解释预期结果;)

    SO网友:Quyen Nguyen

    您想要的职位和任期的关系在表中wp_term_relasionship.对象id等于post_id所以您可以编写自己的查询来访问

    结束

    相关推荐

    按多个元值对Get_Terms进行排序

    我正在尝试获取自定义分类法的所有术语(ediciones) 但由两个ACF字段排序:edicion_ano (年份字段)和edicion_numero (数字字段)。第一个应按年份排序,第二个应按数字字段排序。我从ACF(5.5.X)了解到,可以使用meta_query 我正在使用版本5.5.14。在新版本的ACF(5.5.x)中,现在使用术语元,WP允许对术语进行元查询,因此不再需要这些解决方法。(source)现在我正在使用以下代码:$args = array( \'taxonomy\