WordPress中如何获取下拉选择框内的当前分类术语?附分类法代码
在WordPress中获取下拉选择框的当前分类术语
没问题,我来帮你搞定这个需求,分几种常见场景给你拆解清楚,你可以根据自己的实际情况套用:
场景1:后台自定义MetaBox中的分类下拉框(保存后获取)
如果你是在文章/自定义文章类型的后台 metabox 里加了分类下拉框,要获取用户选中的术语,步骤很清晰:
先确保下拉框的命名正确
渲染下拉框的时候,给它设置好唯一的name属性,同时默认选中当前文章已关联的分类:<?php // 获取当前文章关联的分类ID $selected_terms = wp_get_post_terms(get_the_ID(), 'your_taxonomy_slug', array('fields' => 'ids')); $selected_term_id = !empty($selected_terms) ? $selected_terms[0] : ''; // 渲染分类下拉框 wp_dropdown_categories(array( 'taxonomy' => 'your_taxonomy_slug', // 替换成你的分类法别名 'name' => 'my_custom_tax_select', // 这个name要记好,后面要用 'selected' => $selected_term_id, 'show_option_none' => '请选择分类', 'hide_empty' => false, )); ?>保存MetaBox时获取选中值
在保存 metabox 的回调函数里,通过$_POST拿到选中的分类ID,再转换成完整的术语对象:<?php function save_my_custom_metabox($post_id) { // 先做安全校验,避免恶意提交 if (!isset($_POST['tax_select_nonce']) || !wp_verify_nonce($_POST['tax_select_nonce'], 'tax_select_action')) { return; } if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return; } if (!current_user_can('edit_post', $post_id)) { return; } // 获取选中的分类ID if (isset($_POST['my_custom_tax_select']) && !empty($_POST['my_custom_tax_select'])) { $term_id = intval($_POST['my_custom_tax_select']); // 转换成术语对象 $selected_term = get_term($term_id, 'your_taxonomy_slug'); // 这里可以做你需要的操作,比如关联到文章或者存到自定义字段 wp_set_post_terms($post_id, array($term_id), 'your_taxonomy_slug'); // 测试用:打印术语信息(上线前删掉) // var_dump($selected_term); } } add_action('save_post', 'save_my_custom_metabox'); ?>记得在渲染 metabox 的时候加上nonce字段,比如:
<?php wp_nonce_field('tax_select_action', 'tax_select_nonce'); ?>
场景2:前端下拉筛选框(提交表单后获取)
如果是前端的分类筛选下拉,用户选完提交表单后要获取选中的术语,这么处理:
前端下拉框代码
用表单包裹下拉框,提交到你要处理的页面(比如自定义文章类型的归档页):<form method="get" action="<?php echo esc_url(get_post_type_archive_link('your_post_type')); ?>"> <?php wp_dropdown_categories(array( 'taxonomy' => 'your_taxonomy_slug', 'name' => 'filter_tax', 'selected' => isset($_GET['filter_tax']) ? intval($_GET['filter_tax']) : '', 'show_option_none' => '所有分类', 'hide_empty' => true, )); ?> <button type="submit">筛选</button> </form>获取并使用选中的术语
在模板里拿到GET参数,转换成术语对象,用来展示或者构建查询:<?php if (isset($_GET['filter_tax']) && !empty($_GET['filter_tax'])) { $term_id = intval($_GET['filter_tax']); $selected_term = get_term($term_id, 'your_taxonomy_slug'); if (!is_wp_error($selected_term)) { // 展示当前选中的分类名称 echo '<h2>当前筛选:' . esc_html($selected_term->name) . '</h2>'; // 用这个分类构建文章查询 $args = array( 'post_type' => 'your_post_type', 'tax_query' => array( array( 'taxonomy' => 'your_taxonomy_slug', 'field' => 'term_id', 'terms' => $term_id, ), ), ); $filtered_posts = new WP_Query($args); // 循环输出筛选后的文章... } } ?>
场景3:实时获取前端下拉选中项(无需提交表单)
如果需要用户一选分类就实时获取术语信息,不用等表单提交,用JavaScript配合WP REST API就行:
<select id="live-tax-select"> <?php wp_dropdown_categories(array( 'taxonomy' => 'your_taxonomy_slug', 'echo' => true, 'show_option_none' => '请选择分类', 'hide_empty' => false, 'value_field' => 'term_id', // 选项值设为分类ID )); ?> </select> <script> document.getElementById('live-tax-select').addEventListener('change', function() { const selectedTermId = this.value; if (selectedTermId) { // 调用WP REST API获取分类详情 fetch(`/wp-json/wp/v2/your_taxonomy_slug/${selectedTermId}`) .then(response => response.json()) .then(term => { console.log('当前选中分类:', term.name); console.log('分类描述:', term.description); // 这里可以做实时操作,比如更新页面内容、显示分类相关信息 }) .catch(error => console.error('获取分类信息失败:', error)); } else { console.log('未选择任何分类'); } }); </script>
⚠️ 注意:要让REST API能访问你的分类法,注册分类法的时候要加'show_in_rest' => true参数。
通用注意事项
- 把所有代码里的
your_taxonomy_slug替换成你实际的分类法别名(比如默认分类是category,自定义分类法的slug你自己知道) - 永远做好安全校验:用
intval()转数字ID,用esc_url()、esc_html()转义输出,后台操作一定要加nonce验证 - 如果用
get_term()获取术语对象,记得用is_wp_error()判断是否出错,避免报错
内容的提问来源于stack exchange,提问作者celin sonia
相关产品推荐
相关产品推荐

