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

如何在通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:27:05