File: //www/wp-cli/replace_wishlist.sh
#!/bin/sh
ROOT_DIR="/www/sites/"
LOG_FILE="/www/wp-cli/wishlist_php_update_log.txt"
# 创建日志文件
echo "========= PHP-BASED UPDATE START $(date) =========" > "$LOG_FILE"
count=0
processed=0
# 遍历所有站点目录
find "$ROOT_DIR" -type f -name "wp-config.php" | while IFS= read -r CONFIG_PATH; do
count=$((count + 1))
SITE_DIR=$(dirname "$CONFIG_PATH")
FLAG_FILE="$SITE_DIR/.wishlist_replace"
echo "--------------------------------------"
echo "站点 $count: $SITE_DIR"
if [ -f "$FLAG_FILE" ]; then
echo "⏭ 跳过已处理站点"
continue
fi
# 使用 PHP 逻辑进行更新:获取 -> 替换 -> 更新
# 这种方法不依赖 mysql 命令行工具,且能自动处理序列化
wp eval '
$option_name = "xts-woodmart-options";
$options = get_option($option_name);
if ($options && is_array($options)) {
if (isset($options["wishlist"])) {
$options["wishlist"] = "0";
update_option($option_name, $options);
echo "SUCCESS";
} else {
echo "KEY_NOT_FOUND";
}
} else {
echo "OPTION_NOT_FOUND";
}
' --path="$SITE_DIR" --allow-root > "$SITE_DIR/update_result.tmp"
RESULT=$(cat "$SITE_DIR/update_result.tmp")
rm "$SITE_DIR/update_result.tmp"
if [ "$RESULT" = "SUCCESS" ]; then
touch "$FLAG_FILE"
echo "✔ 成功更新: $SITE_DIR"
echo "DONE: $SITE_DIR" >> "$LOG_FILE"
processed=$((processed + 1))
else
echo "✘ 失败原因: $RESULT ($SITE_DIR)"
echo "FAIL: $RESULT - $SITE_DIR" >> "$LOG_FILE"
fi
done