File: //www/wp-cli/update_stock.sh
#!/bin/sh
ROOT_DIR="/www/sites/"
GLOBAL_LOG_FILE="/www/wp-cli/stock_fix_log.txt"
FLAG_NAME=".stock_update"
echo "========= STOCK FIX START $(date) =========" > "$GLOBAL_LOG_FILE"
TOTAL=0
PROCESSED=0
SKIPPED=0
FAILED=0
echo "🚀 开始执行库存修复..."
while IFS= read -r CONFIG_PATH; do
TOTAL=$((TOTAL + 1))
SITE_DIR=$(dirname "$CONFIG_PATH")
FLAG_FILE="$SITE_DIR/$FLAG_NAME"
echo "--------------------------------------"
echo "📦 [$TOTAL] 站点: $SITE_DIR"
if [ -f "$FLAG_FILE" ]; then
echo "⏭ 已处理"
SKIPPED=$((SKIPPED + 1))
continue
fi
# 直接执行并捕获输出和退出码
OUTPUT=$(wp eval '
global $wpdb;
$updated_stock = $wpdb->query("
UPDATE {$wpdb->postmeta} pm
JOIN {$wpdb->posts} p ON pm.post_id = p.ID
SET pm.meta_value = FLOOR(1000 + (RAND() * 4001))
WHERE pm.meta_key = '\''_stock'\''
AND p.post_type IN ('\''product'\'', '\''product_variation'\'')
");
$updated_status = $wpdb->query("
UPDATE {$wpdb->postmeta} pm
JOIN {$wpdb->posts} p ON pm.post_id = p.ID
SET pm.meta_value = '\''instock'\''
WHERE pm.meta_key = '\''_stock_status'\''
AND p.post_type IN ('\''product'\'', '\''product_variation'\'')
");
$updated_manage = $wpdb->query("
UPDATE {$wpdb->postmeta} pm
JOIN {$wpdb->posts} p ON pm.post_id = p.ID
SET pm.meta_value = '\''yes'\''
WHERE pm.meta_key = '\''_manage_stock'\''
AND p.post_type IN ('\''product'\'', '\''product_variation'\'')
");
$truncate = $wpdb->query("TRUNCATE TABLE {$wpdb->prefix}wc_product_meta_lookup");
// 输出更新统计
echo "STOCK:" . (int)$updated_stock . "|STATUS:" . (int)$updated_status . "|MANAGE:" . (int)$updated_manage . "|TRUNCATE:" . ($truncate !== false ? "1" : "0");
' --path="$SITE_DIR" --allow-root 2>/dev/null)
EXIT_CODE=$?
# 检查是否成功
if [ $EXIT_CODE -eq 0 ] && echo "$OUTPUT" | grep -q "STOCK:"; then
touch "$FLAG_FILE"
echo "✔ 成功 - $OUTPUT"
echo "SUCCESS: $SITE_DIR - $OUTPUT" >> "$GLOBAL_LOG_FILE"
PROCESSED=$((PROCESSED + 1))
else
echo "✘ 失败 - Exit: $EXIT_CODE, Output: $OUTPUT"
echo "FAIL: $SITE_DIR - Exit:$EXIT_CODE Output:$OUTPUT" >> "$GLOBAL_LOG_FILE"
FAILED=$((FAILED + 1))
fi
done < <(find "$ROOT_DIR" -type f -name "wp-config.php")
echo "======================================"
echo "🎉 执行完成"
echo "总数: $TOTAL"
echo "成功: $PROCESSED"
echo "跳过: $SKIPPED"
echo "失败: $FAILED"
echo "日志: $GLOBAL_LOG_FILE"