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

设置自定义文章类型默认分类术语后无法添加新术语的问题

自定义文章类型默认分类术语与新增术语共存的问题解决

你的代码存在核心问题:wp_set_post_terms()默认以替换模式运行,每次保存文章时,都会把该分类下的所有现有术语替换成你指定的Non-Profits,导致用户新增的术语被直接覆盖,无法保留。

以下两种方案可解决问题,根据你的需求选择:

方案1:仅在文章首次创建时设置默认术语

适合允许用户后续移除默认术语的场景,仅在新文章创建时添加默认分类:

add_action('save_post', 'set_default_non_profit_term', 10, 3);
function set_default_non_profit_term($post_id, $post, $update) {
    // 跳过自动保存和修订版
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
    if (wp_is_post_revision($post_id)) return;
    
    // 仅针对目标自定义文章类型
    if ('non_profits_dir_ltg' !== $post->post_type) return;
    
    $default_term_name = 'Non-Profits';
    $taxonomy = 'secondary-listing-category';
    
    // 仅在新文章创建时设置默认术语
    if (!$update) {
        wp_set_post_terms($post_id, $default_term_name, $taxonomy);
    }
}

方案2:强制默认术语始终存在

适合要求默认术语必须保留,同时允许用户添加其他术语的场景:

add_action('save_post', 'enforce_default_non_profit_term', 10, 3);
function enforce_default_non_profit_term($post_id, $post, $update) {
    // 跳过自动保存和修订版
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
    if (wp_is_post_revision($post_id)) return;
    
    // 仅针对目标自定义文章类型
    if ('non_profits_dir_ltg' !== $post->post_type) return;
    
    $default_term_name = 'Non-Profits';
    $taxonomy = 'secondary-listing-category';
    
    // 获取默认术语的对象(确保术语存在)
    $default_term = get_term_by('name', $default_term_name, $taxonomy);
    if (!$default_term) return;
    
    // 获取当前文章已选的该分类术语ID列表
    $current_terms = wp_get_post_terms($post_id, $taxonomy, array('fields' => 'ids'));
    
    // 如果默认术语不在已选列表中,追加进去
    if (!in_array($default_term->term_id, $current_terms)) {
        wp_add_post_terms($post_id, $default_term->term_id, $taxonomy);
    }
}

关键说明

  • 加入了对自动保存、修订版的判断,避免不必要的重复执行
  • 使用save_post钩子的$update参数区分新文章与已存在文章
  • 方案2中用wp_add_post_terms()实现术语追加,而非替换现有内容

内容的提问来源于stack exchange,提问作者Felicia Santos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 10:12:47