【问题标题】:get_the_terms not working in custom pluginget_the_terms 在自定义插件中不起作用
【发布时间】:2026-01-16 07:00:02
【问题描述】:

我创建了将用户数据存储在 db 表中的自定义插件。表单有下拉列表,其中包含分类 id 作为值。

表单正在工作,分类 ID 和其他用户数据正在插入数据库中。

在 wp 管理面板中,我显示已插入数据库的数据。所有数据都带有分类 ID。但是当我使用 get_the_terms 根据分类 id 获取名称时,它什么也没显示。

代码如下:

global $wpdb;
$table_name=$wpdb->prefix .'opu_userdata';
$data=$wpdb->get_results("SELECT * FROM $table_name order by id DESC");
<table class="table table-bordered" id="tow-table">
<thead>
    <tr>
        <th>Sno</th>
        <th>Name</th>
        <th>Email</th>
        <th>Mobile</th>
        <th>Product</th>
        <th>Product Sub</th>
        <th>Annual Salary</th>
        <th>Employee Type</th>
        <th>Age</th>
    </tr>
</thead>
<tbody>
    <?php 
    $sn=1;
    foreach($data as $data):?>
    <tr>
        <td><?php echo $sn;?></td>
        <td><?php echo ucwords($data->name);?></td>
        <td><?php echo $data->email;?></td>
        <td><?php echo $data->mobile;?></td>
        <td><?php echo $data->product;?></td>
        <td><?php
        if($data->product=="bank-account"){
            $id=$data->product_sub;
            $n=get_the_terms($id,'account_type');
            echo $id; /////if i echo id it prints the id perfectly but when i try $n[0]->name it shows nothing (var_dump($n) shows bool(false) )
        }?></td>
        <td><?php echo $data->annual_salary;?></td>
        <td><?php echo $data->emp_type;?></td>
        <td><?php echo $data->age;?></td>
    </tr>
    <?php $sn++; endforeach;?>

</tbody>

【问题讨论】:

  • 您必须确保在执行上述代码之前实际注册了 account_type 分类。这可能不会有助于解决方案,但也会将循环中 as 之后的变量名称更改为其他名称,作为您正在迭代的数组。例如foreach ($data as $d)
  • 获取分类名称,你有没有使用foreach?
  • @jrswgtr 是的,分类已注册,分类的 id 正在插入数据库中
  • @WPDeveloper 我在前端使用的同一行用于单个帖子 get_the_terms(get_the_id(),'account_type') 并且它运行良好。但在 wp-admin 中它不起作用
  • @denny 我猜你需要编写 foreach 循环来从 get_the_terms 获取名称,例如 foreach ( $n as $n_t ) { $name = $n_t-&gt;name; echo $name; }

标签: wordpress


【解决方案1】:

好的,我得到了解决方案。我必须使用 get_term_by 而不是 get_the_terms 来根据分类 id 获取术语名称

解决办法如下:

<table class="table table-bordered" id="tow-table">
<thead>
    <tr>
        <th>Sno</th>
        <th>Name</th>
        <th>Email</th>
        <th>Mobile</th>
        <th>Product</th>
        <th>Product Sub</th>
        <th>Annual Salary</th>
        <th>Employee Type</th>
        <th>Age</th>
    </tr>
</thead>
<tbody>
    <?php 
    $sn=1;
    foreach($data as $d):?>
    <tr>
        <td><?php echo $sn;?></td>
        <td><?php echo ucwords($d->name);?></td>
        <td><?php echo $d->email;?></td>
        <td><?php echo $d->mobile;?></td>
        <td><?php echo $d->product;?></td>
        <td><?php
        if($d->product=="bank-account"){
            $id=$d->product_sub;
            $term=get_term_by('id',$id,'account_type');
            echo $term->name;
        }?></td>
        <td><?php echo $d->annual_salary;?></td>
        <td><?php echo $d->emp_type;?></td>
        <td><?php echo $d->age;?></td>
    </tr>
    <?php $sn++; endforeach;?>

</tbody>

【讨论】: