如何在通过API导入产品时自动设为Draft,并解决无法手动发布的问题
问题根源
你现有代码会在所有产品保存场景下强制将状态修改为草稿,包括你在后台手动点击发布的操作,所以触发保存流程后状态又被拉回草稿,看起来就像发布按钮失效。
修复代码
替换你原有的代码为以下内容即可:
add_filter( 'wp_insert_post_data', 'post_insert_handler', 99, 2 ); function post_insert_handler( $data, $postarr ) { // 仅对产品类型、首次新建、REST API导入的场景强制设为草稿 if ( strpos( $data['post_type'], 'product' ) === 0 && empty( $postarr['ID'] ) && function_exists( 'wp_is_rest_endpoint' ) && wp_is_rest_endpoint() ) { $data['post_status'] = 'draft'; } return $data; }
逻辑说明
- 仅匹配产品类型的内容,不影响站点其他文章/页面的保存
- 仅在首次新建产品时触发修改,已存在的产品更新不会被强制修改状态
- 仅对REST API请求生效(大部分代发供应商的产品导入都是走WooCommerce REST API),你在后台登录后的手动操作不受影响,可正常发布草稿产品
低版本WordPress兼容方案
如果你的WordPress版本低于5.5(无wp_is_rest_endpoint函数),可以使用以下版本的代码,通过判断是否为登录的管理员操作来区分场景:
add_filter( 'wp_insert_post_data', 'post_insert_handler', 99, 2 ); function post_insert_handler( $data, $postarr ) { // 仅对产品类型、首次新建、非登录的API导入场景强制设为草稿 if ( strpos( $data['post_type'], 'product' ) === 0 && empty( $postarr['ID'] ) && ! is_user_logged_in() ) { $data['post_status'] = 'draft'; } return $data; }
内容的提问来源于stack exchange,提问作者Jon Dolsson
相关产品推荐
相关产品推荐

