WordPress测试网站:保存新文章无法插入自定义分类至wp_term_relationships表
解决WordPress未注册用户发广告时分类无法关联到wp_term_relationships的问题
嘿,我来帮你排查这个分类关联没插入的问题!直接操作数据库表很容易踩坑,咱先从WordPress的正确姿势入手:
1. 别直接写数据库,用WP内置函数自动处理关联
WordPress的分类关联涉及wp_terms、wp_term_taxonomy、wp_term_relationships三个表的联动,手动插wp_posts后如果不处理另外两个表,自然不会生成关联记录。推荐用wp_insert_post()函数,它会自动帮你完成分类关联的插入逻辑。
2. 检查分类参数是否匹配你的分类类型
- 如果是默认的文章分类(
category),用post_category参数没问题,但要确保ID=3的分类确实存在; - 如果是自定义分类法,不能用
post_category,得换成tax_input参数,比如你的自定义分类slug是ad_category,就写成:'tax_input' => array('ad_category' => array(3))
3. 完整的测试代码示例
把你的逻辑改成这样试试:
if( isset($_POST['submit']) && wp_verify_nonce( $_POST['name_of_nonce_field'], 'name_of_my_action' )) { // 校验必填字段 if( empty($_POST['post_title']) || empty($_POST['post_content']) ) { // 这里可以加错误提示,比如echo "标题和描述不能为空!"; return; } // 整理文章数据 $post_args = array( 'post_title' => sanitize_text_field($_POST['post_title']), 'post_content' => wp_kses_post($_POST['post_content']), 'post_status' => 'publish', // 测试阶段直接发布,也可以设为draft 'post_type' => 'post', // 如果是自定义广告文章类型,换成你的slug 'post_category' => array(3) // 默认分类法用这个,自定义分类法换成tax_input ); // 插入文章并获取ID $new_post_id = wp_insert_post($post_args); // 检查插入是否成功 if( is_wp_error($new_post_id) ) { echo "插入失败:" . $new_post_id->get_error_message(); } else { // 万一自动关联没生效,手动强制关联分类(可选) wp_set_post_terms($new_post_id, array(3), 'category', true); // 最后一个参数true是替换现有分类,false是追加 } }
4. 额外排查点
- 确认ID=3的分类真实存在:在后台分类管理页面,鼠标悬停在分类上看URL里的
tag_ID参数,或者用get_term_by('id', 3, 'category')打印验证; - 权限问题:未注册用户默认没有发布权限,测试阶段可以临时加一行
wp_set_current_user(1);(切换到管理员权限),看是不是权限导致分类关联被拦截。
内容的提问来源于stack exchange,提问作者dos4dev
相关产品推荐
相关产品推荐

