HEX
Server: nginx
System: Linux f62c58717270 6.1.0-17-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.69-1 (2023-12-30) x86_64
User: www-data (1000)
PHP: 8.0.30
Disabled: NONE
Upload Files
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