wordpress的火车头商品发布接口

<?php
require '../wp-load.php';
ini_set('memory_limit', '1024M');
set_time_limit(180);$top_cat = '';
# 图片链接域名替换
$image_host = '';$start_time = microtime(true);$counter = 0;
// 临时缓存
$products = $skus = $categories = [];
$var_sku_index = 1;$rowData=$_POST;// if ($_SERVER['HTTP_HOST'] == 'www.solglasogononline.com') {
// //   logArray($rowData);// }$attrs=explode('|',$rowData['wp_attname']);
$result=[];if($rowData['wp_attvalue']){// 如果属性大于1if (count($attrs) > 1) {$parts = explode('|', $rowData['wp_attvalue']);$result = array_map(function ($part) {return explode("___", $part);}, $parts);} else {if (strpos($rowData['wp_attvalue'], "___") !== false) {$result[0] = explode("___", $rowData['wp_attvalue']);} else {$result[0] = explode("|", $rowData['wp_attvalue']);}}
}while (count($attrs) < 3) {$attrs[] = '';
}while (count($result) < 3) {$result[] = '';
}// 产品细节图
$wpImgs= explode("|", trim($rowData['wp_img']));
if (strpos($rowData['wp_img'], "\n") !== false) {$wpImgs= explode("\n", trim($rowData['wp_img']));
}
// 产品细节图如果大于5张只取5张
if (count($wpImgs) > 5) {$wpImgs = array_slice($wpImgs, 0, 5);
}// 产品主图
$mainImage= isset($rowData['mainimg']) ? $rowData['mainimg'] : $rowData['minimg'];
if (empty($mainImage) && count($wpImgs) > 0) {$mainImage = trim($wpImgs[0]); 
}// 原价 // 销售价
$rowData['wp_price'] = convertToNumber($rowData['wp_price']);
$rowData['wp_saleprice'] = convertToNumber($rowData['wp_saleprice']);
$regularPrice = $rowData['wp_price']>0?(float) $rowData['wp_price']:(float) $rowData['wp_saleprice'];
$salePrice = $rowData['wp_saleprice']?(float) $rowData['wp_saleprice']:(float) $rowData['wp_price'];// 目录
$rowData['wp_categories'] = str_replace('Home|','',trim($rowData['wp_categories']));
$rowData['wp_categories'] = str_replace("\'"," ",trim($rowData['wp_categories']));$productData = ['sku' => trim($rowData['wp_sku']),'title' => trim($rowData['wp_title']),'description' => trim($rowData['wp_description']),'option1' => trim($attrs[0]),'option1_value' => $result[0],'option2' => trim($attrs[1]),'option2_value' => $result[1],'option3' => trim($attrs[2]),'option3_value' => $result[2],'regular_price' => $regularPrice,'sale_price' => $salePrice,'images' => $wpImgs,'main_image' => $mainImage,'categories' => str_replace('|','>',$rowData['wp_categories']),// 'image_id' => 0,// 'image_ids' => [],// 'category_ids' => [],'options' => [],
];// var_dump($productData);exit;// 检查是否有效
if (! empty($productData['sku']) && ! empty($productData['regular_price']) && ! empty($productData['main_image'])) {// 搜索SKU产品是否存在 存在则跳过$find = wc_get_product_id_by_sku($productData['sku']);if ($find) {echo "error 产品已存在";die;}// 替换图片域名if (! empty($image_host)) {$productData['main_image'] = preg_replace('/^(https?\:\/\/)[^\/]+(.*)/si', "$1{$image_host}$2", $productData['main_image']);}// 主产品还是变体if (! isset($products[$productData['sku']])) {// 主产品if (empty($productData['title']) || empty($productData['categories'])) {echo "error 标题与分类均不能为空";die;}// 创建产品// 检查价格if ($productData['regular_price'] <= 0 || $productData['sale_price'] <= 0) {echo "error 价格异常";die;}$products[$productData['sku']] = $productData;}// 扫描属性$options = ['option1' => $productData['option1_value'],'option2' => $productData['option2_value'],'option3' => $productData['option3_value'],'regular_price' => $productData['regular_price'],'sale_price' => $productData['sale_price'],'image' => $productData['main_image'],];$products[$productData['sku']]['options'][] = $options;
} else {echo "error 无效的产品数据,SKU、原价与主图均不能为空";die;
}$product_count = count($products);foreach ($products as $sku => $myProduct) {$counter++;$var_sku_index = 1;$Option1_data = [];$Option2_data = [];$Option3_data = [];foreach ($myProduct['options'] as $ops){if ($ops['option1']){$Option1_data = $ops['option1'];}}foreach ($myProduct['options'] as $ops){if ($ops['option2']){$Option2_data = $ops['option2'];}}foreach ($myProduct['options'] as $ops){if ($ops['option3']){$Option3_data = $ops['option3'];}}// 创建主图$image_id = image_link_upload($myProduct['main_image']);// 检查主图是否导入成功if (! is_numeric($image_id) || $image_id <= 0) {echo "error 主图导入失败";die;}$image_ids = [];foreach ($myProduct['images'] as $image) {$img_id = image_link_upload($image);if (is_numeric($img_id) && $img_id > 0) {$image_ids[] = $img_id;}}// 创建类目$category_ids = [];$md5 = md5($myProduct['categories']);if (isset($categories[$md5])) {$category_ids = $categories[$md5];} else {$category_ids = create_categories($myProduct['categories']);$categories[$md5] = $category_ids;}if (empty($category_ids)) {echo "error 类目导入失败";die;}if (! empty($Option1_data)) {$wc_product = new WC_Product_Variable();$wc_product->set_name($myProduct['title']);$wc_product->set_regular_price($myProduct['regular_price']);$wc_product->set_sale_price($myProduct['sale_price']);$wc_product->set_description($myProduct['description']);$wc_product->set_sku($myProduct['sku']);$wc_product->set_catalog_visibility('visible');$wc_product->set_manage_stock(true);$wc_product->set_stock_status('instock');$wc_product->set_stock_quantity(9999);$wc_product->set_status('publish');$wc_product->set_tax_status('none');$wc_product->set_tax_class('zero-rate');$wc_product->set_image_id($image_id);}else{$wc_product = new WC_Product_Simple();$wc_product->set_name($myProduct['title']);$wc_product->set_regular_price($myProduct['regular_price']);$wc_product->set_sale_price($myProduct['sale_price']);$wc_product->set_description($myProduct['description']);$wc_product->set_sku($myProduct['sku']);$wc_product->set_catalog_visibility('visible');$wc_product->set_manage_stock(true);$wc_product->set_stock_status('instock');$wc_product->set_stock_quantity(9999);$wc_product->set_status('publish');$wc_product->set_tax_status('none');$wc_product->set_tax_class('zero-rate');$wc_product->set_image_id($image_id);}if (! empty($image_ids)) {$wc_product->set_gallery_image_ids( $image_ids );}$wc_product->set_category_ids( $category_ids );// 属性$attribute_data = [];if (! empty($Option1_data)) {$attribute = new WC_Product_Attribute();$attribute->set_name( $myProduct['option1'] );$attribute->set_options( array_values(array_unique($Option1_data)) );$attribute->set_position( 0 );$attribute->set_visible( true );$attribute->set_variation( true );$attribute_data[] = $attribute;}if (! empty($Option2_data)) {$attribute = new WC_Product_Attribute();$attribute->set_name( $myProduct['option2'] );$attribute->set_options( array_values(array_unique($Option2_data)) );$attribute->set_position( 0 );$attribute->set_visible( true );$attribute->set_variation( true );$attribute_data[] = $attribute;}if (! empty($Option3_data)) {$attribute = new WC_Product_Attribute();$attribute->set_name( $myProduct['option3'] );$attribute->set_options( array_values(array_unique($Option3_data)) );$attribute->set_position( 0 );$attribute->set_visible( true );$attribute->set_variation( true );$attribute_data[] = $attribute;}if (! empty($attribute_data)) {$wc_product->set_attributes( $attribute_data );}$wc_product->save();// $wc_product->check_stock();$main_product_id = $wc_product->get_id();if (! empty($Option1_data)) {foreach ($myProduct['options'] as $ops) {$ops_data = [];if ($Option1_data) {$ops_data[] = $ops['option1'];}if ($Option2_data) {$ops_data[] = $ops['option2'];}if ($Option3_data) {$ops_data[] = $ops['option3'];}# 变体图片上传// $var_image_id = image_link_upload($ops['image']);// TODO::暂时直接使用SKU图片$var_image_id = $image_id;if (is_numeric($var_image_id) && $var_image_id > 0) {$var_sku = "{$sku}_{$var_sku_index}";$variation = new WC_Product_Variation();$variation->set_parent_id($main_product_id);$variation->set_attributes($ops_data[0]);$variation->set_regular_price($ops['regular_price']);$variation->set_sale_price($ops['sale_price']);$variation->set_image_id($var_image_id);$variation->set_manage_stock(true);$variation->set_status('publish');$variation->set_stock_status('instock');$variation->set_stock_quantity(9999);$variation->set_downloadable(false);$variation->set_virtual(false);$variation->set_sku($var_sku);$variation->save();$var_sku_index++;} else {}}}echo "success 主产品导入成功";die;
}// 图片上传程序
function image_link_upload($image_url){$url = trim($image_url);$check_filetype = wp_check_filetype( basename( $url ), null );$attachment_image = array('post_title'     => apply_filters('exmage_insert_attachment_image_name', "", "", $url, 0),'post_mime_type' => empty( $check_filetype['type'] ) ? 'image/url' : $check_filetype['type'],'guid'           => strlen( $url ) > 255 ? '' : $url,//guid is varchar(255)'post_status'    => 'inherit','file' => $url,);// 手动插入图片附件 for EXMAGE_WP_IMAGE_LINKS 站外图片链接$attachment_id = wp_insert_attachment( $attachment_image, $url, 0, true );if ($attachment_id && !is_wp_error( $attachment_id )) {update_post_meta( $attachment_id, '_exmage_external_url', $url );return $attachment_id;} else {return $attachment_id->get_error_message();}// $image_id = "";// $post_parent = "0";// if(class_exists( 'EXMAGE_WP_IMAGE_LINKS' )){//     if (preg_match('/^https?\:\/\//si', $image_url)) {//         $add_image = EXMAGE_WP_IMAGE_LINKS::add_image( $image_url, $image_id, $post_parent );//         if ($add_image["id"]){//             return (int) $add_image["id"];//         } else {//             return $add_image["message"];//         }//     } else {//         return "error 无效的图片链接 ---> $image_url";//     }// } else {//     echo "error 请先安装 EXMAGE_WP_IMAGE_LINKS 插件!\n";//     die;// }
}function create_categories($categories = '') {global $top_cat;$categories = trim($categories);if (! empty($categories)) {if (! empty($top_cat)) {$categories = "{$top_cat}>{$categories}";}}$categories_str = $categories;$categories = explode('>', trim($categories));$id_array = [];$parent_id = 0;foreach ($categories as $category_name) {$category_name = strtolower(trim($category_name));if (empty($category_name)) {continue;}$args = array('taxonomy'   => 'product_cat','parent'     => $parent_id,'hide_empty' => false,);$terms = get_terms($args);$categoryNname = htmlentities($category_name, ENT_QUOTES | ENT_HTML5, 'UTF-8');$categoryNname2 = str_replace('&amp;', '&', $category_name);$categoryNname2 = str_replace('&', '&amp;', $categoryNname2);// 检查是否有匹配名称的类目$found_term = false;if (!empty($terms) && !is_wp_error($terms)) {foreach ($terms as $term) {// if ($_SERVER['HTTP_HOST'] == 'www.solglasogononline.com') {//     var_dump($term->name .'----'. $category_name .'----'.  $categoryNname .'----'.$categoryNname2);// }$_name = strtolower($term->name);if ($_name === $category_name || $_name === $categoryNname || $_name === $categoryNname2) {$found_term = $term;break;}}}// if ($_SERVER['HTTP_HOST'] == 'www.solglasogononline.com') {//             var_dump($category_name . '===' . !$found_term);//         }if ($found_term) {$id_array[] = $found_term->term_id;$parent_id = $found_term->term_id;} else {// 创建类目$new_term = wp_insert_term($category_name, 'product_cat', array('parent' => $parent_id));if (!is_wp_error($new_term)) {$id_array[] = $new_term['term_id'];$parent_id = $new_term['term_id'];} else {// 类目创建失败,打印错误信息echo "-> 错误:类目 {$categories_str}.{$category_name} 创建失败 ---> " . $new_term->get_error_message() . "\n";die;}}}return $id_array;
}function convertToNumber($str) {preg_match('/[\d.]+/', $str, $matches);if (!empty($matches)) {return floatval($matches[0]);}return 0;
}function logArray($array) {$logFile = 'logs.txt'; // 日志文件名$timestamp = date('Y-m-d H:i:s'); // 时间戳格式// 格式化数组内容$logEntry = "[" . $timestamp . "] " . print_r($array, true) . PHP_EOL;// 写入日志文件file_put_contents($logFile, $logEntry, FILE_APPEND);
}

请求数据如下:

            $rowData = ['wp_title' => 'Dog leash Pony makarony Ginger','minimg' => 'https://s3.lax.sharktech.net/img/2121-sn3o3g3u3kw51.jpg','wp_img' => 'https://s3.lax.sharktech.net/img/2121-sn3o3g3u3kw51.jpg|https://s3.lax.sharktech.net/img/2122-itlbf1neu3c52.jpg|https://s3.lax.sharktech.net/img/2123-vqtkibfgxcd53.jpg|https://s3.lax.sharktech.net/img/2125-tnmhvdt1aeh54.jpg|https://s3.lax.sharktech.net/img/2127-onkjwwocpuq55.jpg','wp_attname' => 'Size','wp_attname' => 'Color|Style',//'wp_attvalue' => '140 cm|170 cm','wp_attvalue' => 'Pink___Camel___Beige|M___L___XL','wp_description' => '<p>Is your dog fidgety and unrestrained and no leash can hold it? Our Pony-Makarony is created<span class="Apple-converted-space"> </span>specifically for the most active ones.<span class="Apple-converted-space"> </span></p><p>Standard thick rope 11 mm fits for medium and large sized dogs.</p><p>Thin rope 7 mm and lightweight hardware available for small dogs under 5 kg.<span class="Apple-converted-space"> </span></p><p>- genuine Italian leather</p><p>- bronze cast hardware</p><p>- polyamid rope</p><p>- Handmade</p><p>- our love</p><p>Harness is included in the photos as an illustration of how a set might be assembled and is ordered separately.<span class="Apple-converted-space"> </span></p>','wp_price' => '','wp_categories' => 'Dog leash & collar','wp_saleprice' => '$59','wp_sku' => 'H4kXL0','cat_id'=>25,];

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/67557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GaussDB日常维护操作

GaussDB日常维护操作 日常维护检查操作系统参数数据库健康状态日志收集日志清理应用连接数表的例行维护索引重建慢SQL诊断 日常维护检查 实例状态检查&#xff1a; #检查集群实例状态 gs_check -U omm -i CheckClusterStatecm_ctl query -Cvipd#检查主备DN的角色和同步状态 g…

Asp .Net Core 实现微服务:集成 Ocelot+Nacos+Swagger+Cors实现网关、服务注册、服务发现

什么是 Ocelot ? Ocelot是一个开源的ASP.NET Core微服务网关&#xff0c;它提供了API网关所需的所有功能&#xff0c;如路由、认证、限流、监控等。 Ocelot是一个简单、灵活且功能强大的API网关&#xff0c;它可以与现有的服务集成&#xff0c;并帮助您保护、监控和扩展您的…

性价比1.2V电压基准替代

前言&#xff1a; 小于2V的电压基准比较少&#xff0c;且价格稍贵&#xff0c;对于要求不高的场合&#xff0c;1117可以替代使用&#xff0c;温度系数低于 100ppm/C, 价格便宜。 1117是线性稳压器的一种&#xff0c;一般情况下&#xff0c;输出电压可调。 如下述的1117&#xf…

使用 Java 和 FreeMarker 实现自动生成供货清单,动态生成 Word 文档,简化文档处理流程。

在上一篇博客中主要是使用SpringBootApache POI实现了BOM物料清单Excel表格导出&#xff0c;详见以下博客&#xff1a; Spring Boot Apache POI 实现 Exc&#xff08;&#xff09;el 导出&#xff1a;BOM物料清单生成器&#xff08;支持中文文件名、样式美化、数据合并&#…

探索与创作:2024年CSDN平台上的成长与突破

文章目录 我与CSDN的初次邂逅初学阶段的阅读CSDN&#xff1a;编程新手的避风港初学者的福音&#xff1a;细致入微的知识讲解考试复习神器&#xff1a;技术总结的“救命指南”曾经的自己&#xff1a;为何迟迟不迈出写博客的第一步兴趣萌芽&#xff1a;从“读”到“想写”的初体验…

鸿蒙(HarmonyOS)的开发

在当今数字化时代&#xff0c;软件开发不仅需要技术上的创新和突破&#xff0c;同时也必须严格遵守法律法规。作为中国自主研发的操作系统&#xff0c;鸿蒙&#xff08;HarmonyOS&#xff09;的开发者们更应该注重这一点。本文将围绕“鸿蒙开发需遵守法律法规”这一主题&#x…

SSM课设-学生管理系统

【课设者】SSM课设-学生管理系统 技术栈: 后端: SpringSpringMVCMybatisMySQLJSP 前端: HtmlCssJavaScriptEasyUIAjax 功能: 学生端: 登陆 学生信息管理 个人信息管理 老师端: 多了教师信息管理 管理员端: 多了班级信息管理 多了年级信息管理 多了系统用户管理

力扣 打家劫舍

动态规划&#xff0c;当前状态由前两个状态获得&#xff0c;滚动数组。 题目 从题可以看出要达到最高金额时&#xff0c;要从相邻的房屋拿。因此是当前房屋的金额隔一个做累加&#xff0c;当然还需要跟前一个相邻的房屋做比较&#xff0c;便于取到哪边金额更高&#xff0c;因此…

用公网服务器实现内网穿透

首先需要一个公网服务器 下载frp 搜索github下载到frp&#xff0c;服务端frps/客户端frpc。。下载的时候要注意自己本地内网机的cpu版本和服务端cpu架构 我的电脑是mac M1PRO版本 下载的是&#xff1a;darwinarm64 比如 服务端一般是Linux&#xff08;Intel 64位CPU&#xf…

clang、C++23标准库模块基本使用

1. 已经知道clang和LLVM的版本大于18的话&#xff0c;就支持C23标准的新特性&#xff1a;标准库模块啦&#xff01;那么该怎么使用呢&#xff1f; 2. 操作系统是Manjaro 3. 必须同时把clang 、LLVM 、 libc 、 libcabi这四个软件包同时安装好&#xff01;缺一不可…

【Django开发】django美多商城项目完整开发4.0第12篇:商品部分,表结构【附代码文档】

本教程的知识点为&#xff1a; 项目准备 项目准备 配置 1. 修改settings/dev.py 文件中的路径信息 2. INSTALLED_APPS 3. 数据库 用户部分 图片 1. 后端接口设计&#xff1a; 视图原型 2. 具体视图实现 用户部分 使用Celery完成发送 判断帐号是否存在 1. 判断用户名是否存在 后…

Redis的安装和使用--Windows系统

Redis下载地址&#xff1a; windows版本readis下载&#xff08;GitHub&#xff09;&#xff1a; https://github.com/tporadowski/redis/releases &#xff08;推荐使用&#xff09; https://github.com/MicrosoftArchive/redis/releases 官网下载&#xff08;无Windows版本…

Linux操作命令之云计算基础命令

一、图形化界面/文本模式 ctrlaltF2-6 图形切换到文本 ctrlalt 鼠标跳出虚拟机 ctrlaltF1 文本切换到图形 shift ctrl "" 扩大 ctrl "-" 缩小 shift ctrl "n" 新终端 shift ctrl "t" 新标签 alt 1,…

LabVIEW桥接传感器配置与数据采集

该LabVIEW程序主要用于配置桥接传感器并进行数据采集&#xff0c;涉及电压激励、桥接电阻、采样设置及错误处理。第一个VI&#xff08;"Auto Cleanup"&#xff09;用于自动清理资源&#xff0c;建议保留以确保系统稳定运行。 以下是对图像中各个组件的详细解释&#…

逐笔成交逐笔委托Level2高频数据下载和分析:20241230

逐笔委托逐笔成交下载 链接: https://pan.baidu.com/s/11Tdq06bbYX4ID9dEaiv_lQ?pwdcge6 提取码: cge6 Level2逐笔成交逐笔委托数据分享下载 利用Level2的逐笔交易和委托数据&#xff0c;这种以毫秒为单位的详细信息能揭露众多关键信息&#xff0c;如庄家意图、伪装行为&…

网络编程 | UDP广播通信

1、什么是广播 在上一篇博客文章中已经对UDP进行了详细的说明介绍及如何编程实现。本文将接着上一文的内容&#xff0c;在其基础上&#xff0c;对UDP的知识体系进一步深入的讲解。 网络编程 | UDP套接字通信及编程实现经验教程-CSDN博客 例子&#xff1a;在一些中小学的操场中&…

Count Sketch--计数草图

背景 Count Sketch 是一种空间高效的概率型数据结构&#xff0c;由 Moses Charikar、Kevin Chen 和 Martin Farach-Colton 在 2002 年提出&#xff0c;用于估计数据流中元素的频率&#xff0c;也可用于解决重击者问题。 原理 算法结构 参数设定&#xff1a;Count Sketch算法…

洛谷P4017 最大食物链计数(图的拓扑排序)

题目链接&#xff1a;P4017 最大食物链计数 - 洛谷 | 计算机科学教育新生态 题目描述 给你一个食物网&#xff0c;你要求出这个食物网中最大食物链的数量。 &#xff08;这里的“最大食物链”&#xff0c;指的是生物学意义上的食物链&#xff0c;即最左端是不会捕食其他生物…

2025.1.17——三、SQLi regexp正则表达式|

题目来源&#xff1a;buuctf [NCTF2019]SQLi1 目录 一、打开靶机&#xff0c;整理信息 二、解题思路 step 1&#xff1a;正常注入 step 2&#xff1a;弄清关键字黑名单 1.目录扫描 2.bp爆破 step 3&#xff1a;根据过滤名单构造payload step 4&#xff1a;regexp正则注…

【华为OD-E卷 - 字符串加密 100分(python、java、c++、js、c)】

【华为OD-E卷 - 字符串加密 100分&#xff08;python、java、c、js、c&#xff09;】 题目 给你一串未加密的字符串str&#xff0c;通过对字符串的每一个字母进行改变来实现加密&#xff0c;加密方式是在每一个字母str[i]偏移特定数组元素a[i]的量&#xff0c;数组a前三位已经…