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('&', '&', $category_name);$categoryNname2 = str_replace('&', '&', $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,];
相关文章:
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…...

浙江安吉成新照明电器:Acrel-1000DP 分布式光伏监控系统应用探索
安科瑞吕梦怡 18706162527 摘 要:分布式光伏发电站是指将光伏发电组件安装在用户的建筑物屋顶、空地或其他适合的场地上,利用太阳能进行发电的一种可再生能源利用方式,与传统的大型集中式光伏电站相比,分布式光伏发电具有更灵活…...

总结3..
#include<stdio.h> int n,m; int a[1002][1002]; int b[1002][1002];//判断该空的八连通图是否被走过 int gg0; int dd0; int xz[8]{-1,-1,-1,0,0,1,1,1},yz[8]{-1,0,1,-1,1,-1,0,1};//八个方向 void dfs(int x,int y) { int dx,dy; for(int i0;i<8;i) { …...

信息奥赛一本通 1168:大整数加法
这道题是一道大整数加法,涉及到高精度的算法,比如说有两个数要进行相加,1111111111111111111111111111111111111112222222222222222222222222222222,那么如果这两个数很大的话我们常用的数据类型是不能进行计算的,那么…...
3.3 OpenAI GPT-4, GPT-3.5, GPT-3 模型调用:开发者指南
OpenAI GPT-4, GPT-3.5, GPT-3 模型调用:开发者指南 OpenAI 的 GPT 系列语言模型,包括 GPT-4、GPT-3.5 和 GPT-3,已经成为自然语言处理领域的标杆。无论是文本生成、对话系统,还是自动化任务,开发者都可以通过 API 调用这些强大的模型来增强他们的应用。本文将为您详细介…...

横盘出击的三种经典走势形态,买点以及需要注意的问题技术详解
龙头股在横盘整理过程中,也会出现几种不同的形态,比如矩形整理形态,或者在某一趋势线下方运行。 第一种形态:突破横盘趋势线 突破横盘趋势线时识别横盘龙头启动的关键点位。股价经过一段时间的横盘后,突然出现快速上…...
处理没有提示的字符串、计算相隔天数应用题
正常情况下,小云每天跑 1 千米。如果某天是周一或者月初(1 日),为了激励自己,小云要跑 2 千米。如果同时是周一或月初,小云也是跑 2 千米。 小云跑步已经坚持了很长时间,从 1990 年 1 月 1 日周…...

【LeetCode】力扣刷题热题100道(31-35题)附源码 搜索二维矩阵 岛屿数量 腐烂的橙子 课程表 实现 Trie (前缀树)(C++)
一、搜索二维矩阵 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 可以使用 从右上角开始搜索 的方法来有效地找到目标值。 选择起始位置: 从矩…...

react使用react-redux状态管理
1、安装 npm install react-redux2、创建store.js import { createStore } from redux;// 定义初始状态 const initialState {counter: 888 };// 定义 reducer 函数,根据 action 类型更新状态 function reducer(state initialState, action) {switch (action.ty…...

04_角色创建窗口
将上文的登录窗口隐藏 创建空节点 作为创建角色窗口 命名为CreateWnd 创建输入的名字的输入框 再创建一个按钮用来随机角色名字 创建开始游戏按钮 End....
Dockerfile -> Docker image -> Docker container
1. Dockfile -> Docker image docker build -t shuai_image -f xxx/xxx/Dockerfile . (.不能少)出现: [] Building xxx(10/17) > [internal] load build definition from Dockerfile > > transferring dockerfile: … > > transferring context …...
LDN的蓝牙双模键盘帮助文档
文档索引 已支持的PCB列表(仅列出少部分):键盘特性硬件软件键盘以及驱动蓝牙模式USB模式 驱动功能介绍主界面键盘列表页面键盘配置(使用双模键盘的请务必细看本说明)功能层配置(改键)触发层配置(改FN键等触发功能)功能选择(重要&a…...

搭建一个基于Spring Boot的驾校管理系统
搭建一个基于Spring Boot的驾校管理系统可以涵盖多个功能模块,例如学员管理、教练管理、课程管理、考试管理、车辆管理等。以下是一个简化的步骤指南,帮助你快速搭建一个基础的系统。 1. 项目初始化 使用 Spring Initializr 生成一个Spring Boot项目&am…...

运动相机拍视频过程中摔了,导致录视频打不开怎么办
3-11 在使用运动相机拍摄激烈运动的时候,极大的震动会有一定概率使得保存在存储卡中的视频出现打不开的情况,原因是存储卡和相机在极端情况下,可能会出现接触不良的问题,如果遇到这种问题,就不得不进行视频修复了。 本…...
MongoDB vs Redis:相似与区别
前言 在当今的数据库领域,MongoDB 和 Redis 都是备受关注的非关系型数据库(NoSQL),它们各自具有独特的优势和适用场景。本文将深入探讨 MongoDB 和 Redis 的特点,并详细对比它们之间的相似之处和区别,帮助…...

数字图像处理:实验二
任务一: 将不同像素(32、64和256)的原图像放大为像素大 小为1024*1024的图像(图像自选) 要求:1)输出一幅图,该图包含六幅子图,第一排是原图,第 二排是对应放大…...

基于海思soc的智能产品开发(高、中、低soc、以及和fpga的搭配)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 市场上关于图像、音频的soc其实非常多,这里面有高、中、低档,开发方式也不相同。之所以会这样,有价格的因素&am…...

SSM旅游信息管理系统
🍅点赞收藏关注 → 添加文档最下方联系方式可咨询本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅 项目视频 …...
FastADMIN实现网站启动时执行程序的方法
FastAdmin基于ThinkPHP框架:ThinkPHP框架中与 Application_Start 类似的功能可以在应用初始化钩子(Hook)中实现。在FastAdmin项目中,一般在应用的 common.php 文件中定义行为(Behavior)来实现类似功能。 定…...

【威联通】FTP服务提示:服务器回应不可路由的地址。被动模式失败。
FTP服务器提示:服务器回应不可路由的地址。被动模式失败。 问题原因网络结构安全管理配置服务器配置网关 问题 FTP服务器提示:服务器回应不可路由的地址…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...