🢂Instalacja i wstępna konfiguracja WordPressa za pomocą WP‑CLI (update)

WP-CLI to narzędzie, które znacząco ułatwia instalację i wstępną konfiguracje WordPressa.

WP-CLI to interfejs wiersza poleceń dla WordPressa, który umożliwia szybkie i efektywne zarządzanie instalacją, konfiguracją oraz codziennymi zadaniami związanymi z utrzymaniem strony. W tym wpisie znajdziesz skrypt instalacji i konfiguracji WordPressa przy użyciu WP-CLI, zaczynając od pobrania podstawowych plików, aż po instalację wtyczek i tworzenie menu.

Co ten skrypt robi?

Ten skrypt bash automatyzuje proces instalacji i konfiguracji WordPressa.

Instrukcja użycia:

  1. Skopiuj poniższy skrypt do pliku, na przykład setup_wordpress.sh w katalogu public_html.
  2. Upewnij się, że masz uprawnienia do wykonania skryptu: chmod +x setup_wordpress.sh.
  3. Uruchom skrypt: ./setup_wordpress.sh.
  4. Oczywiście dostosuj zmienne do swoich potrzeb :)

Kompletny skrypt instalacyjny WordPress

Poniżej znajduje się gotowy skrypt, który możesz skopiować i wkleić do pliku bash:

#!/bin/bash

# Zmienne konfiguracyjne - dostosuj do swoich potrzeb
DB_NAME="NazwaBazy"
DB_USER="user"
DB_PASS="pass"
WP_URL="https://JakisDev.pl"
WP_TITLE="Tytuł Strony"
WP_ADMIN_USER="login"
WP_ADMIN_PASSWORD="haslo"
WP_ADMIN_EMAIL="noreply@noreply.pl"
WP_LOCALE="pl_PL"
# Ścieżka do pliku ZIP Elementor Pro (po zakupie)
ELEMENTOR_PRO_ZIP="/sciezka/do/pobranego/elementor-pro.zip"

# 1. Pobieranie WordPressa
wp core download --locale=$WP_LOCALE

# 2. Tworzenie bazy danych
mysql -u root -p -e "CREATE DATABASE $DB_NAME;"

# 3. Tworzenie pliku konfiguracyjnego
wp config create --dbname=$DB_NAME --dbuser=$DB_USER --dbpass=$DB_PASS --locale=$WP_LOCALE

# 4. Konfiguracja wydajności i pamięci
wp config set WP_MEMORY_LIMIT '512M'
wp config set WP_MAX_MEMORY_LIMIT '1024M'
wp config set COMPRESS_CSS true --raw
wp config set COMPRESS_SCRIPTS true --raw
wp config set WP_CACHE true --raw
wp config set WP_ENVIRONMENT_TYPE "'production'" --raw
wp config set CONCATENATE_SCRIPTS true --raw
wp config set IMAGE_EDIT_OVERWRITE true --raw
wp config set JPEG_QUALITY 90 --raw
wp config set WP_POST_REVISIONS 2 --raw
wp config set DISABLE_WP_CRON true --raw

# 5. Konfiguracja bezpieczeństwa
wp config set WP_DEBUG false --raw
wp config set WP_DEBUG_LOG false --raw
wp config set WP_DEBUG_DISPLAY false --raw
wp config set DISALLOW_FILE_EDIT true --raw
wp config set DISALLOW_FILE_MODS true --raw
wp config set AUTOMATIC_UPDATER_DISABLED true --raw

# 6. Instalacja WordPressa
wp core install --url=$WP_URL --title="$WP_TITLE" --admin_user=$WP_ADMIN_USER --admin_password=$WP_ADMIN_PASSWORD --admin_email=$WP_ADMIN_EMAIL

# 7. Ustawienia podstawowych adresów URL
wp config set WP_HOME $WP_URL
wp config set WP_SITEURL $WP_URL

# 8. Konfiguracja podstawowych ustawień WordPress
wp rewrite structure '/%postname%/'

# 9. Usuwanie domyślnych treści
wp post delete 1 2 --force

# 10. Instalacja i aktywacja motywu
wp theme install astra --activate
wp theme delete $(wp theme list --status=inactive --field=name)

# 11. Instalacja i aktywacja wtyczek
wp plugin install elementor --activate
# Instalacja Elementor Pro (wymagany zakupiony plik ZIP)
wp plugin install $ELEMENTOR_PRO_ZIP --activate
wp plugin install wp-mail-smtp --activate
wp plugin install contact-form-7 --activate
wp plugin install disable-comments --activate
wp plugin install remove-category-url --activate
wp plugin install seo-by-rank-math --activate
wp plugin install litespeed-cache --activate
wp plugin install astra-import-export --activate
wp plugin install wp-sweep --activate
wp option update disable_comments_settings '{"remove_everywhere":1}'

# 12. Tworzenie podstawowych stron
wp post create --post_type=page --post_status=publish --post_title="Home" --porcelain
wp post create --post_type=page --post_status=publish --post_title="Kontakt" --porcelain

# 13. Tworzenie kategorii
wp term create category "Aktualności" --slug='news'
wp option update default_category "Aktualności"

# 14. Generowanie przykładowych treści (opcjonalnie)
wp post generate --count=5 --post_type=page --post_status=publish
wp post generate --count=5 --post_type=post --post_status=publish

# 15. Tworzenie i konfiguracja menu
# Tworzenie menu
wp menu create "Menu Główne"
wp menu create "Menu Stopki"
wp menu create "Menu Szybki kontakt"
wp menu create "Menu Regulaminy"

# Przypisywanie menu do lokalizacji
wp menu location assign "Menu Główne" primary
wp menu location assign "Menu Stopki" footer_menu
wp menu location assign "Menu Szybki kontakt" mobile_menu
wp menu location assign "Menu Regulaminy" footer_links

# Dodawanie elementów do menu głównego
wp menu item add-custom "Menu Główne" "Home" '/'
wp menu item add-custom "Menu Główne" "Kontakt" '/kontakt'

# Dodawanie regulaminów do menu
wp post create --post_type=page --post_status=publish --post_title="Polityka prywatności" --porcelain | xargs -I {} wp menu item add-post "Menu Regulaminy" {}
wp post create --post_type=page --post_status=publish --post_title="Pliki cookie" --porcelain | xargs -I {} wp menu item add-post "Menu Regulaminy" {}

# 16. Tworzenie kopii zapasowej bazy danych
wp db export --add-drop-table backup.sql

# Dodatkowe optymalizacje wydajności
wp config set SAVEQUERIES false --raw
wp config set EMPTY_TRASH_DAYS 7 --raw
wp config set AUTOSAVE_INTERVAL 300 --raw
wp config set WP_HTTP_BLOCK_EXTERNAL false --raw

# Wyłączenie niepotrzebnych zapytań XML-RPC i pingbacków
wp option update default_ping_status 'closed'
wp option update default_pingback_flag 0
wp option update use_trackback 0

# Wyłączenie automatycznego osadzania z innych witryn
wp option update embed_autourls 0

# Optymalizacja Heartbeat API (zmniejszenie częstotliwości odpytywania serwera)
wp config set AUTOSAVE_INTERVAL 300 --raw
wp config set WP_POST_REVISIONS 3 --raw
wp config set EMPTY_TRASH_DAYS 7 --raw

# Dodatkowe ustawienia kompresji i wydajności
wp config set ENFORCE_GZIP true --raw
wp config set COMPRESS_CSS true --raw
wp config set COMPRESS_SCRIPTS true --raw
wp config set CONCATENATE_SCRIPTS true --raw
wp config set SAVEQUERIES false --raw

# Wyłączenie emoji i dashicons dla odwiedzających witrynę (można dodać do functions.php motywu)
echo "<?php
// Wyłączenie emoji
function disable_emojis() {
 remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
 remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
 remove_action( 'wp_print_styles', 'print_emoji_styles' );
 remove_action( 'admin_print_styles', 'print_emoji_styles' ); 
 remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
 remove_filter( 'comment_text_rss', 'wp_staticize_emoji' ); 
 remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
}
add_action( 'init', 'disable_emojis' );

// Wyłączenie dashicons na frontend dla niezalogowanych użytkowników
function wpdocs_dequeue_dashicon() {
    if (current_user_can('edit_posts')) {
        return;
    }
    wp_deregister_style('dashicons');
}
add_action('wp_enqueue_scripts', 'wpdocs_dequeue_dashicon');
?>" > wp-content/themes/astra/functions-optimization.php

# Dodanie wpisu o ładowaniu tego pliku do functions.php motywu Astra
echo "<?php
// Załadowanie optymalizacji
require_once( get_template_directory() . '/functions-optimization.php' );
?>" >> wp-content/themes/astra/functions.php

# Optymalizacja plików .htaccess dla Apache (jeśli używany)
cat > .htaccess << 'EOL'
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

# BEGIN Kompresja GZIP
<IfModule mod_deflate.c>
    # Kompresja dla różnych typów plików
    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE text/javascript
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE application/rss+xml
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE application/x-javascript
    AddOutputFilterByType DEFLATE application/json
</IfModule>
# END Kompresja GZIP

# BEGIN Nagłówki buforowania
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/jpg "access plus 1 year"
    ExpiresByType image/jpeg "access plus 1 year"
    ExpiresByType image/gif "access plus 1 year"
    ExpiresByType image/png "access plus 1 year"
    ExpiresByType image/webp "access plus 1 year"
    ExpiresByType image/svg+xml "access plus 1 year"
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/pdf "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
    ExpiresByType application/x-javascript "access plus 1 month"
    ExpiresByType application/x-shockwave-flash "access plus 1 month"
    ExpiresByType image/x-icon "access plus 1 year"
    ExpiresDefault "access plus 2 days"
</IfModule>
# END Nagłówki buforowania
EOL

echo "Konfiguracja WordPressa zakończona! Możesz teraz przejść do swojej strony: $WP_URL"

Polecenia pogrupowane tematycznie

Jeśli wolisz wykonywać polecenia krok po kroku lub dostosować tylko wybrane elementy, poniżej znajdziesz te same polecenia pogrupowane tematycznie:

1. Instalacja podstawowa

# Pobieranie WordPress z polską lokalizacją
wp core download --locale=pl_PL

# Tworzenie nowej bazy danych
mysql -u root -p -e "CREATE DATABASE NazwaBazy;"

# Tworzenie pliku konfiguracyjnego wp-config.php
wp config create --dbname=NazwaBazy --dbuser=user --dbpass=pass --locale=pl_PL

# Instalacja WordPress
wp core install --url=https://JakisDev.pl --title="Tytuł Strony" --admin_user=login --admin_password=haslo --admin_email=noreply@noreply.pl

# Ustawienia podstawowych adresów URL
wp config set WP_HOME 'https://JakisDev.pl'
wp config set WP_SITEURL 'https://JakisDev.pl'

2. Konfiguracja wydajności i pamięci

# Zwiększenie limitu pamięci
wp config set WP_MEMORY_LIMIT '512M'
wp config set WP_MAX_MEMORY_LIMIT '1024M'

# Optymalizacja zasobów i pamięci podręcznej
wp config set COMPRESS_CSS true --raw
wp config set COMPRESS_SCRIPTS true --raw
wp config set WP_CACHE true --raw
wp config set WP_ENVIRONMENT_TYPE "'production'" --raw
wp config set CONCATENATE_SCRIPTS true --raw

# Optymalizacja obrazów
wp config set IMAGE_EDIT_OVERWRITE true --raw
wp config set JPEG_QUALITY 90 --raw

# Optymalizacja obsługi bazy danych
wp config set WP_POST_REVISIONS 2 --raw
# lub całkowite wyłączenie rewizji:
# wp config set WP_POST_REVISIONS false --raw

# Konfiguracja CRON
wp config set DISABLE_WP_CRON true --raw

3. Konfiguracja bezpieczeństwa

# Wyłączenie trybu debugowania
wp config set WP_DEBUG false --raw
wp config set WP_DEBUG_LOG false --raw
wp config set WP_DEBUG_DISPLAY false --raw

# Wyłączenie edytora plików
wp config set DISALLOW_FILE_EDIT true --raw
wp config set DISALLOW_FILE_MODS true --raw

# Wyłączenie automatycznych aktualizacji rdzenia
wp config set AUTOMATIC_UPDATER_DISABLED true --raw

4. Podstawowe ustawienia WordPress

# Konfiguracja permalinków
wp rewrite structure '/%postname%/'

# Ustawienia lokalizacji
wp option update timezone_string Europe/Warsaw
wp option update time_format H:i
wp option update start_of_week 1

# Konfiguracja uploadów
wp option update uploads_use_yearmonth_folders 0

# Konfiguracja RSS - ustawienie, czy w RSS powinny być pełne treści, czy tylko ich fragment
wp option update rss_use_excerpt 1

5. Zarządzanie treściami

# Usuwanie domyślnych treści
wp post delete 1 2 --force

# Tworzenie podstawowych stron
wp post create --post_type=page --post_status=publish --post_title="Home" --porcelain
wp post create --post_type=page --post_status=publish --post_title="Kontakt" --porcelain

# Tworzenie kategorii
wp term create category "Aktualności" --slug='news'
wp option update default_category "Aktualności"

# Generowanie przykładowych treści
wp post generate --count=5 --post_type=page --post_status=publish
wp post generate --count=5 --post_type=post --post_status=publish

6. Motywy i wtyczki

# Usuwanie nieaktywnych wtyczek i domyślnych
wp plugin deactivate hello jetpack
wp plugin delete hello jetpack
wp plugin deactivate $(wp plugin list --status=inactive --field=name)
wp plugin delete $(wp plugin list --status=inactive --field=name)

# Instalacja i aktywacja motywu
wp theme install astra --activate
wp theme delete $(wp theme list --status=inactive --field=name)
wp theme install /sciezka/do/pobranego/theme_wh.zip --activate


# Instalacja i aktywacja wtyczek
wp plugin install elementor --activate
# Instalacja Elementor Pro (wymagany zakupiony plik ZIP)
# Uwaga: Musisz najpierw zakupić Elementor Pro i pobrać plik ZIP
wp plugin install /sciezka/do/pobranego/elementor-pro.zip --activate
# Po instalacji należy aktywować licencję w panelu WordPress: Elementor > Licencja
wp plugin install wp-mail-smtp --activate
wp plugin install contact-form-7 --activate
wp plugin install disable-comments --activate
wp plugin install remove-category-url --activate
wp plugin install seo-by-rank-math --activate
wp plugin install litespeed-cache --activate
wp plugin install astra-import-export --activate
wp plugin install wp-sweep --activate

# Konfiguracja komentarzy
wp option update disable_comments_settings '{"remove_everywhere":1}'

7. Menu i nawigacja

# Tworzenie menu
wp menu create "Menu Główne"
wp menu create "Menu Stopki"
wp menu create "Menu Szybki kontakt"
wp menu create "Menu Regulaminy"

# Przypisywanie menu do lokalizacji
wp menu location assign "Menu Główne" primary
wp menu location assign "Menu Stopki" footer_menu
wp menu location assign "Menu Szybki kontakt" mobile_menu
wp menu location assign "Menu Regulaminy" footer_links

# Dodawanie elementów do menu głównego
wp menu item add-custom "Menu Główne" "Home" '/'
wp menu item add-custom "Menu Główne" "Kontakt" '/kontakt'

# Dodawanie regulaminów do menu
wp post create --post_type=page --post_status=publish --post_title="Polityka prywatności" --porcelain | xargs -I {} wp menu item add-post "Menu Regulaminy" {}
wp post create --post_type=page --post_status=publish --post_title="Pliki cookie" --porcelain | xargs -I {} wp menu item add-post "Menu Regulaminy" {}

8. Kopia zapasowa

# Tworzenie kopii zapasowej bazy danych
wp db export --add-drop-table backup.sql

9. Dodatkowe optymalizacje wydajności

# Wyłączenie niepotrzebnych zapytań XML-RPC i pingbacków
wp option update default_ping_status 'closed'
wp option update default_pingback_flag 0
wp option update use_trackback 0

# Wyłączenie automatycznego osadzania z innych witryn
wp option update embed_autourls 0

# Optymalizacja Heartbeat API (zmniejszenie częstotliwości odpytywania serwera)
wp config set AUTOSAVE_INTERVAL 300 --raw
wp config set WP_POST_REVISIONS 3 --raw
wp config set EMPTY_TRASH_DAYS 7 --raw

# Dodatkowe ustawienia kompresji i wydajności
wp config set ENFORCE_GZIP true --raw
wp config set COMPRESS_CSS true --raw
wp config set COMPRESS_SCRIPTS true --raw
wp config set CONCATENATE_SCRIPTS true --raw
wp config set SAVEQUERIES false --raw

# Wyłączenie emoji i dashicons dla odwiedzających witrynę (można dodać do functions.php motywu)
echo "<?php
// Wyłączenie emoji
function disable_emojis() {
 remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
 remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
 remove_action( 'wp_print_styles', 'print_emoji_styles' );
 remove_action( 'admin_print_styles', 'print_emoji_styles' ); 
 remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
 remove_filter( 'comment_text_rss', 'wp_staticize_emoji' ); 
 remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
}
add_action( 'init', 'disable_emojis' );

// Wyłączenie dashicons na frontend dla niezalogowanych użytkowników
function wpdocs_dequeue_dashicon() {
    if (current_user_can('edit_posts')) {
        return;
    }
    wp_deregister_style('dashicons');
}
add_action('wp_enqueue_scripts', 'wpdocs_dequeue_dashicon');
?>" > wp-content/themes/astra/functions-optimization.php

# Dodanie wpisu o ładowaniu tego pliku do functions.php motywu Astra
echo "<?php
// Załadowanie optymalizacji
require_once( get_template_directory() . '/functions-optimization.php' );
?>" >> wp-content/themes/astra/functions.php

# Optymalizacja plików .htaccess dla Apache (jeśli używany)
cat > .htaccess << 'EOL'
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

# BEGIN Kompresja GZIP
<IfModule mod_deflate.c>
    # Kompresja dla różnych typów plików
    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE text/javascript
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE application/rss+xml
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE application/x-javascript
    AddOutputFilterByType DEFLATE application/json
</IfModule>
# END Kompresja GZIP

# BEGIN Nagłówki buforowania
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/jpg "access plus 1 year"
    ExpiresByType image/jpeg "access plus 1 year"
    ExpiresByType image/gif "access plus 1 year"
    ExpiresByType image/png "access plus 1 year"
    ExpiresByType image/webp "access plus 1 year"
    ExpiresByType image/svg+xml "access plus 1 year"
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/pdf "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
    ExpiresByType application/x-javascript "access plus 1 month"
    ExpiresByType application/x-shockwave-flash "access plus 1 month"
    ExpiresByType image/x-icon "access plus 1 year"
    ExpiresDefault "access plus 2 days"
</IfModule>
# END Nagłówki buforowania
EOL

Te ustawienia i konfiguracje pomogą w optymalizacji WordPressa, zmniejszając obciążenie serwera i przyspieszając działanie strony. Użycie poleceń WP-CLI znacząco przyspiesza proces konfiguracji i eliminuje potrzebę ręcznego konfigurowania wielu ustawień poprzez panel administracyjny.