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

如何用WP_Query获取WooCommerce产品名 修复WP All Import去重代码

代码失效核心原因

你的代码存在4个关键逻辑错误,导致判断完全不生效:

  • 把post_title(文章/产品原生标题字段,存储在wp_posts表)错误当成自定义字段,用meta_query查询,meta_query只能查询存在postmeta表的自定义字段,根本匹配不到标题数据
  • 导入产品时post_type参数写的是post(普通博客文章),如果导入的是WooCommerce产品,对应类型是product,查询范围完全错误
  • 没有限制查询的文章状态,会把自动草稿、回收站的无效内容也算作已存在,容易误跳过
  • 没有做数据校验和查询效率优化,字段不存在时会抛出PHP警告,全量查询也会拖慢导入速度
修改后可用代码
add_filter('wp_all_import_is_post_to_create', 'create_only_if_unique_custom_field', 10, 3);
function create_only_if_unique_custom_field( $continue_import, $data, $import_id ) {
    // 仅在导入ID为33、34时生效
    if ( $import_id == 33 || $import_id == 34 ) {

        // 校验导入的名称字段是否存在,不存在直接走原有逻辑避免报错
        if ( empty($data['name']) ) {
            return $continue_import;
        }
        $value_to_look_up = trim($data['name']);

        // WP_Query查询参数
        $args = array (
            // 按实际导入内容修改类型:WooCommerce产品填'product',普通文章填'post',自定义文章类型填对应slug
            'post_type'  => array( 'product' ),
            // 精确匹配标题
            'title'      => $value_to_look_up,
            // 仅校验正常状态的内容,排除自动草稿、回收站等无效数据
            'post_status' => array('publish', 'draft', 'pending', 'private'),
            // 查到1条匹配结果就终止查询,提升导入效率
            'posts_per_page' => 1,
            'no_found_rows' => true,
            'ignore_sticky_posts' => true
        );

        $query = new WP_Query( $args );
        $is_exists = $query->have_posts();
        // 重置WP全局查询数据,避免影响后续导入逻辑
        wp_reset_postdata();

        // 已存在同名内容就跳过创建,不存在则正常导入
        return !$is_exists;

    } 
    // 其他导入任务不做拦截
    return $continue_import;
}
使用注意事项
  • 如果导入的不是WooCommerce产品,记得把post_type参数值替换为你实际导入的文章类型标识
  • 如果导入文件中产品名称对应的CSV/XML节点名不是name,需要把$data['name']的键名改成你实际使用的节点名
  • 代码可以放在当前主题的functions.php文件,或者自定义功能插件中生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:42:14