如何在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
相关产品推荐
相关产品推荐

