You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WordPress中创建支持关联分类的自定义taxonomy

WordPress 为自定义分类法term添加关联分类选择功能实现步骤

前置说明

你需要给player自定义分类法的每个term(也就是你说的球员词条)添加运动分类关联字段,下面是无插件纯代码实现方式,代码都放在当前活跃主题的functions.php文件中即可。


步骤1:添加分类选择框到player分类的新增/编辑页面

// 给player分类新增页面添加字段
add_action( 'player_add_form_fields', 'add_player_sport_field', 10, 2 );
function add_player_sport_field( $taxonomy ) {
    ?>
    <div class="form-field term-group">
        <label for="player_sport">所属运动分类</label>
        <select id="player_sport" name="player_sport">
            <option value="">请选择运动分类</option>
            <?php
            // 这里获取你已经创建的板球、足球分类,假设运动分类是默认category,如果是自定义分类法把category改成对应分类法别名即可
            $sports = get_terms( array(
                'taxonomy' => 'category',
                'hide_empty' => false,
                'include' => array(1,2) // 这里改成你自己的板球、足球分类的ID
            ) );
            foreach ( $sports as $sport ) {
                echo '<option value="'.esc_attr($sport->term_id).'">'.esc_html($sport->name).'</option>';
            }
            ?>
        </select>
    </div>
    <?php
}

// 给player分类编辑页面添加字段
add_action( 'player_edit_form_fields', 'edit_player_sport_field', 10, 2 );
function edit_player_sport_field( $term, $taxonomy ) {
    // 获取已保存的运动分类ID
    $selected_sport = get_term_meta( $term->term_id, 'player_sport', true );
    ?>
    <tr class="form-field term-group-wrap">
        <th scope="row"><label for="player_sport">所属运动分类</label></th>
        <td>
            <select id="player_sport" name="player_sport">
                <option value="">请选择运动分类</option>
                <?php
                $sports = get_terms( array(
                    'taxonomy' => 'category',
                    'hide_empty' => false,
                    'include' => array(1,2) // 同上,替换为你自己的板球、足球分类ID
                ) );
                foreach ( $sports as $sport ) {
                    $selected = selected( $selected_sport, $sport->term_id, false );
                    echo '<option value="'.esc_attr($sport->term_id).'" '.$selected.'>'.esc_html($sport->name).'</option>';
                }
                ?>
            </select>
        </td>
    </tr>
    <?php
}

步骤2:保存选择的运动分类数据

// 保存player分类的运动分类元数据
add_action( 'created_player', 'save_player_sport_meta', 10, 2 );
add_action( 'edited_player', 'save_player_sport_meta', 10, 2 );
function save_player_sport_meta( $term_id, $tt_id ) {
    if ( isset( $_POST['player_sport'] ) ) {
        update_term_meta( $term_id, 'player_sport', absint( $_POST['player_sport'] ) );
    }
}

步骤3:前台调用获取对应运动分类

需要显示球员所属运动时,用以下代码获取即可:

// $player_term_id 是当前player分类term的ID
$sport_id = get_term_meta( $player_term_id, 'player_sport', true );
if ( $sport_id ) {
    $sport_term = get_term( $sport_id );
    echo '所属运动:'.esc_html($sport_term->name);
}

注意事项

  • 如果你的板球、足球分类不是默认的category,请把代码中get_terms的taxonomy参数替换为对应运动分类法的别名
  • 代码中的include数组里的ID请替换为你自己后台板球、足球两个分类的实际ID,也可以删掉include参数直接拉取该分类法下所有分类

内容的提问来源于stack exchange,提问作者Vimal Usadadiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 08:27:11