已实现moviestax的terms添加至自定义metabox,如何新增bookstax的terms?
当然可以!完全能把「bookstax」的Terms也加到同一个Metabox里
下面是基于你现有代码的修改思路和具体实现,你可以直接参考调整:
1. 先回顾你现有Metabox的核心逻辑
假设你之前输出moviestax Terms的代码大概是这样的:
// 获取moviestax的所有分类项 $movie_terms = get_terms( array( 'taxonomy' => 'moviestax', 'hide_empty' => false, // 显示空分类 ) ); // 把分类项渲染到Metabox中 if ( ! empty( $movie_terms ) && ! is_wp_error( $movie_terms ) ) { echo '<h4>电影分类</h4>'; foreach ( $movie_terms as $term ) { echo '<label><input type="checkbox" name="selected_movie_terms[]" value="' . esc_attr( $term->term_id ) . '" /> ' . esc_html( $term->name ) . '</label><br>'; } }
2. 添加「bookstax」的Terms输出
只需要在同一个Metabox的回调函数里,复制类似的逻辑,把taxonomy参数替换成bookstax即可:
// 获取bookstax的所有分类项 $book_terms = get_terms( array( 'taxonomy' => 'bookstax', 'hide_empty' => false, ) ); // 把分类项渲染到Metabox中 if ( ! empty( $book_terms ) && ! is_wp_error( $book_terms ) ) { echo '<h4>书籍分类</h4>'; foreach ( $book_terms as $term ) { echo '<label><input type="checkbox" name="selected_book_terms[]" value="' . esc_attr( $term->term_id ) . '" /> ' . esc_html( $term->name ) . '</label><br>'; } }
3. 同步修改数据保存逻辑
如果之前只处理了moviestax的保存,现在要加上bookstax的保存代码,确保选中的分类项能正确存储:
// 保存moviestax的选中项 if ( isset( $_POST['selected_movie_terms'] ) ) { $selected_movie_terms = array_map( 'intval', $_POST['selected_movie_terms'] ); wp_set_post_terms( $post_id, $selected_movie_terms, 'moviestax', false ); } else { // 没有选中时清空关联 wp_set_post_terms( $post_id, array(), 'moviestax', false ); } // 保存bookstax的选中项 if ( isset( $_POST['selected_book_terms'] ) ) { $selected_book_terms = array_map( 'intval', $_POST['selected_book_terms'] ); wp_set_post_terms( $post_id, $selected_book_terms, 'bookstax', false ); } else { wp_set_post_terms( $post_id, array(), 'bookstax', false ); }
几个小提醒
- 确认
bookstax这个分类法已经成功注册(可以用get_taxonomies()函数验证) - 表单字段的
name属性要区分开(比如selected_movie_terms和selected_book_terms),避免数据冲突 - 始终用
esc_attr()和esc_html()做安全转义,防止XSS漏洞
这样就能在同一个Metabox里同时管理两个分类法的Terms啦~
内容的提问来源于stack exchange,提问作者Mona Coder
相关产品推荐
相关产品推荐

