diff --git a/scripts/wp-search-replace.sh b/scripts/wp-search-replace.sh index 582d429..1510a6d 100644 --- a/scripts/wp-search-replace.sh +++ b/scripts/wp-search-replace.sh @@ -225,7 +225,25 @@ if [[ -f "$CONFIG_FILE" && -w "$CONFIG_FILE" ]]; then info "Added https:// prefix to URL: $TARGET_URL" fi # shellcheck disable=SC2016 # we want literal single quotes inside sed replacement - sed -i -E "s|define\(\s*'WP_HOME',\s*'[^']*'\s*\);|define( 'WP_HOME', '${TARGET_URL}' );|; s|define\(\s*'WP_SITEURL',\s*'[^']*'\s*\);|define( 'WP_SITEURL', '${TARGET_URL}' );|" "$CONFIG_FILE" || warning "Failed to update wp-config.php" + # Replace existing definitions if they exist +sed -i -E "s|define\(\s*'WP_HOME'\s*,\s*'[^']*'\s*\);|define( 'WP_HOME', '${TARGET_URL}' );|; s|define\(\s*'WP_SITEURL'\s*,\s*'[^']*'\s*\);|define( 'WP_SITEURL', '${TARGET_URL}' );|; s|\$_SERVER\['HTTP_HOST'\]\s*=\s*'[^']*';|\$_SERVER['HTTP_HOST'] = '${HOST_ONLY}';|" "$CONFIG_FILE" || warning "Failed to update wp-config.php" + +# If WP_HOME wasn't present, insert block above /* That's all */ +if ! grep -q "WP_HOME" "$CONFIG_FILE"; then + info "Inserting WP_HOME and WP_SITEURL constants into wp-config.php …" + awk -v url="$TARGET_URL" -v host="$HOST_ONLY" ' + BEGIN{inserted=0} + /\/\* That\x27s all/{ + print "\n// Added by wp-search-replace.sh"; + print "define( \"WP_HOME\", \"" url "\" );"; + print "define( \"WP_SITEURL\", \"" url "\" );"; + print "if ( defined( \"WP_CLI\" ) && WP_CLI && ! isset( $_SERVER[\"HTTP_HOST\"] ) ) { $_SERVER[\"HTTP_HOST\"] = \"" host "\"; }"; + inserted=1; + } + {print} + END{if(!inserted) exit 1} + ' "$CONFIG_FILE" > "$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE" +fi else warning "wp-config.php not found or not writable; skipped WP_HOME / WP_SITEURL update." fi