如何用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
相关产品推荐
相关产品推荐

