wordpressLabel="[Wordpress]" # Lists all WordPress users for a site. # $1 (domain): site domain name. function cmdWordpressUserList() { local output error printRow if ! run output error wordpressUserList "$@"; then printDanger "$error" else printText "$output" fi printRow } # Sets the password for a WordPress user. # $1 (domain): site domain name. # $2 (user): WordPress username or user ID. # $3 (password): new password. function cmdWordpressPasswordSet() { local output error printRow if ! run output error wordpressPasswordSet "$@"; then printDanger "$error" else printText "$output" fi printRow } # Executes an arbitrary WP-CLI command inside the site's vhost or all vhosts. # $1 (all|domain): site domain name or all vhosts. # $@ (...): WP-CLI sub-command and arguments. function cmdWordpressExec() { local target="$1" shift local vhostList error printRow if [[ -z "$target" ]]; then printDanger "Target not specified"; elif ! run vhostList error openlitespeedVhostList; then printDanger "Cannot get vhost list: $error"; elif [[ "$target" == "all" ]]; then local domain for domain in $vhostList; do printSection "$domain" if ! run output error wordpressExec "$domain" "$@"; then printDanger "$error" else printText "$output" fi done elif ! listContains "$target" "$vhostList"; then printDanger "Unknown domain: $target"; elif ! run output error wordpressExec "$target" "$@"; then printDanger "$error" else printText "$output" fi } function cmdWordpressSalt() { local target="$1" local vhostList error printRow if [[ -z "$target" ]]; then printDanger "Target not specified"; elif ! run vhostList error openlitespeedVhostList; then printDanger "Cannot get vhost list: $error"; elif [[ "$target" == "all" ]]; then local domain for domain in $vhostList; do if ! runError error wordpressSalt "$domain"; then printDotText "$domain" "$labelFail" printDanger "$error" else printDotText "$domain" "$labelDone" fi done elif ! listContains "$target" "$vhostList"; then printDanger "Unknown domain: $target"; elif ! runError error wordpressSalt "$target"; then printDotText "$target" "$labelFail" printDanger "$error" else printDotText "$target" "$labelDone" fi printRow } function cmdWordpressCheck() { local target="$1" local vhostList error printRow if [[ -z "$target" ]]; then printDanger "Target not specified"; elif ! run vhostList error openlitespeedVhostList; then printDanger "Cannot get vhost list: $error"; elif [[ "$target" == "all" ]]; then local domain for domain in $vhostList; do printSection "$domain | core" wordpressExec "$domain" core verify-checksums printSection "$domain | plugins" wordpressExec "$domain" plugin verify-checksums --all done elif ! listContains "$target" "$vhostList"; then printDanger "Unknown domain: $target"; else printSection "$target | core" wordpressExec "$target" core verify-checksums printSection "$target | plugins" wordpressExec "$target" plugin verify-checksums --all fi printRow } # Updates all WordPress URLs in DB to match the current domain, cleans cache and Redis. # $1 (domain): site domain name. # [$2] (abspathOld): old absolute path to replace. function cmdWordpressDomainUpdate() { local domain="$1" [[ -n "$domain" ]] || { printDanger "$wordpressLabel Domain not specified"; return 1; } local siteNew="https://$domain" local abspathOld="$2" local isMultiSite isMultiSite=$(wordpressExec "$domain" eval 'echo is_multisite() ? 1 : 0;') if [[ "$isMultiSite" == "1" ]]; then printDanger "$wordpressLabel This script is for SINGLE SITE only. Detected multisite. Abort." return 1 fi local siteConst homeConst siteOption homeOption siteConst=$(wordpressExec "$domain" eval 'echo defined("WP_SITEURL")?WP_SITEURL:"";' || true) siteConst=$(strTrimSlash "$siteConst") homeConst=$(wordpressExec "$domain" eval 'echo defined("WP_HOME")?WP_HOME:"";' || true) homeConst=$(strTrimSlash "$homeConst") siteOption=$(wordpressExec "$domain" option get siteurl 2>/dev/null || true) siteOption=$(strTrimSlash "$siteOption") homeOption=$(wordpressExec "$domain" option get home 2>/dev/null || true) homeOption=$(strTrimSlash "$homeOption") printInfo "$wordpressLabel Wordpress siteurl | Const: $siteConst | Option: $siteOption" printInfo "$wordpressLabel Wordpress home | Const: $homeConst | Option: $homeOption" local siteOld="${siteConst:-$siteOption}" if [[ -z "$siteOld" ]]; then siteOld="${homeConst:-$homeOption}" fi if [[ -z "$siteOld" ]]; then appError "Could not detect siteOld (neither constants nor DB options present)." return 2 fi local schemeOld hostOld rootOld schemeOld=$(printf '%s' "$siteOld" | awk -F:// '{print $1}') hostOld=$(printf '%s' "$siteOld" | awk -F[/:] '{print $4}') rootOld="$schemeOld://$hostOld" printInfo "$wordpressLabel Wordpress OLD | Site: $siteOld | Scheme: $schemeOld | Host: $hostOld | Root: $rootOld" local sitePath homePath sitePath=$(wordpressExec "$domain" eval 'echo parse_url(get_option("siteurl"), PHP_URL_PATH)?:"";' || true) [[ "$sitePath" == "/" ]] && sitePath="" homePath=$(wordpressExec "$domain" eval 'echo parse_url(get_option("home"), PHP_URL_PATH)?:"";' || true) [[ "$homePath" == "/" ]] && homePath="" local wpType="unknown" if [[ -z "$homePath" && -z "$sitePath" ]]; then wpType="single_root" elif [[ -n "$homePath" && -n "$sitePath" && "$homePath" == "$sitePath" ]]; then wpType="single_subdir" elif [[ -z "$homePath" && -n "$sitePath" ]]; then wpType="single_mixed" fi printInfo "$wordpressLabel Wordpress OLD | Type: $wpType" local siteConstHas homeConstHas siteConstHas=$(wordpressExec "$domain" eval 'echo defined("WP_SITEURL")?1:0;') if [[ "$siteConstHas" == "1" ]]; then wordpressExec "$domain" config delete WP_SITEURL --type=constant || true fi homeConstHas=$(wordpressExec "$domain" eval 'echo defined("WP_HOME")?1:0;') if [[ "$homeConstHas" == "1" ]]; then wordpressExec "$domain" config delete WP_HOME --type=constant || true fi printInfo "$wordpressLabel Update siteurl: $siteNew" wordpressExec "$domain" option update siteurl "$siteNew" printInfo "$wordpressLabel Update home: $siteNew" wordpressExec "$domain" option update home "$siteNew" printInfo "$wordpressLabel Replace in DB (1): $siteOld --> $siteNew" wordpressSearchReplace "$domain" "$siteOld" "$siteNew" if [[ -n "$homeOption" && "$homeOption" != "$siteOld" ]]; then printInfo "$wordpressLabel Replace in DB (2): $homeOption --> $siteNew" wordpressSearchReplace "$domain" "$homeOption" "$siteNew" fi if [[ -n "$siteOption" && "$siteOption" != "$siteOld" && "$siteOption" != "$homeOption" ]]; then printInfo "$wordpressLabel Replace in DB (3): $siteOption --> $siteNew" wordpressSearchReplace "$domain" "$siteOption" "$siteNew" fi if [[ -n "$hostOld" ]]; then printInfo "$wordpressLabel Replace in DB (4): //$hostOld --> $siteNew" wordpressSearchReplace "$domain" "//$hostOld" "$siteNew" fi if [[ "$wpType" == "single_mixed" ]]; then printInfo "$wordpressLabel Replace in DB (5): $rootOld --> $siteNew" wordpressSearchReplace "$domain" "$rootOld" "$siteNew" fi if [[ -n "$abspathOld" ]]; then printInfo "$wordpressLabel Replace in DB (6): $abspathOld --> /var/www/vhosts/$domain/www" wordpressSearchReplace "$domain" "$abspathOld" "/var/www/vhosts/$domain/www" fi printInfo "$wordpressLabel Replace in DB (7): $hostOld --> $domain" wordpressSearchReplace "$domain" "$hostOld" "$domain" printInfo "$wordpressLabel Delete options: upload_path/upload_url_path..." wordpressExec "$domain" option delete upload_path || true wordpressExec "$domain" option delete upload_url_path || true printInfo "$wordpressLabel Clean cache..." wordpressExec "$domain" transient delete --all || true printInfo "$wordpressLabel Redis clean..." redisDomainClean "$domain" || true }