POZNAN, POL - FEB 6, 2021: Laptop computer displaying logo of WordPress, a free and open-source content management system (CMS) written in PHP and paired with a MySQL or MariaDB database

Jak ustawić limit pamięci dla WordPressa (WP_MEMORY_LIMIT)

Komunikat błędu

				
					Fatal error: Allowed memory size of 12345678 bytes 
exhausted (tried to allocate 23456789 bytes) in public_html/wp-includes/plugin.php 
on line 1111
				
			

Błąd informuje o ilości pamięci, która jest aktualnie wykorzystywana oraz ile bajtów już się nie zmieściło. Podana jest również ścieżka do pliku, który w którym wystąpił ten błąd i konkretna linijka kodu w tym pliku. Jest to informacja przydatna, jeśli żadna z podanych poniżej metod zwiększenia limitu nie zadziała.

Lub też inna wersja komunikatu:

				
					Fatal error: Out of memory (allocated 12345678) (tried to allocate 23456789bytes) 
in public_html/wp-includes/plugin.php 
on line 1000
				
			

Obydwa komunikaty informują, że skończyła się pamięć dla skryptów PHP. Wynika to z ograniczeń serwera i ogranicza się głównie do zmiany konfiguracji. Czasami jednak, szczególnie na darmowych serwerach może się okazać, że takiej konfiguracji nie ma lub maksymalny limit jest mocno ograniczony.

Zwiększenie limitu pamięci dla WordPressa

Domyślnie WordPress przydziela do 40 MB

Jeśli serwer zwraca powyższy błąd oznacza, że powyższe wartości są za małe.

Jaki limit jest odpowiedni?

To zależy od tego co wykonuje wywołująca błąd wtyczka/szablon.

Zazwyczaj wystarczy 128 MB ale jeśli wtyczka pobiera np. duży plik xml czy listę kilkudziesięciu tysięcy produktów to może nie wystarczyć.

Sposoby na zwiększenie limitu pamięci WordPress

  • Edycja pliku php.ini
  • Edycja pliku .htaccess
  • Edycja pliku wp-config.php

php.ini

Konieczny będzie dostęp do pliku php.ini, hostingi współdzielone bardzo rzadko pozwalają na edycje pliku.

Aby zmienić wartość należy odnaleźć linijkę:

				
					memory_limit = xxxM
				
			
i zmienić wartość w miejscu xxx
M – oznacza wartość w megabajtów.

 

Edycja pliku .htaccess

Jeśli edycja php.ini nie pomogła lub nie ma dostępu do tego pliku można spróbować edytować plik .htaccess na serwerze.
Plik .htaccess znajduje się w głównym katalogu WordPressa.
Na końcu pliku należy dodać poniższą linijkę z ustalonym limitem pamięci.

				
					php_value memory_limit xxxM
				
			

Edycja pliku wp-config.php

W przypadku gdy żaden z powyższych sposobów nie pomoże, pozostaje edycja pliku wp-config.php w głównym katalogu WordPressa.
Należy dodać poniższą linijkę na końcu pliku ale przed komentarzem „..Miłego blogowania!”.

				
					define('WP_MEMORY_LIMIT', 'xxxM');
				
			

Nic nie pomaga. Zmień wersję PHP

Może się zdarzyć, że żadna z opcji nie zadziała. Hostingi często nie pozwalają na edycję limitu pamięci lub ten limit w wybranym pakiecie jest mocno ograniczony. Należy wówczas skontaktować z administratorem z prośbą o zwiększenie limitu pamięci. Jeśli maksymalny limit pamięci nie będzie wystarczający konieczna będzie zmiana pakietu na wyższy lub po prostu zmiana hostingu.

Jest jeszcze jedna możliwość! Wiele hostingów pozwala na samodzielną zmianę wersji PHP do najnowszej wersji 7 lub też umożliwia taką zmianę na żądanie. Nowy PHP jest tak wydajny, że bardzo często nie trzeba zwiększać limitu pamięci.

Wtyczki, które mają problemy z pamięcią na PHP 5.6 i starszych wersjach nie stwarzają problemów przy PHP 7 przy niższych limitach pamięci. Uwaga! Przed aktualizacją PHP należy upewnić się, że wszystkie wtyczki w sklepie wspierają nową wersję.

OLYMPUS DIGITAL CAMERA

Jak dodać niestandardowy JavaScript w WordPressie

Często zdarza się, że dodanie JavaScript do śledzenia analityki jest pierwszym rodzajem niestandardowego kodu, który użytkownik WordPress musi wdrożyć.

Zazwyczaj dokumentacja, którą otrzymujesz wraz z tymi kodami jest napisana tak, jakby Twoja strona była tylko zbiorem plików HTML.

Ale WordPress tak nie działa. HTML twojej strony jest generowany dynamicznie.

Sposoby na dodanie niestandardowego kodu JavaScript do Twojej witryny

Oto szybka lista opcji dodawania JavaScript do Twojej witryny WordPress. Wszystkie one będą działać, ale niektóre są lepsze od innych. Przejdę nad każdym z nich szczegółowo w tym artykule:

    • Załaduj oddzielny plik JavaScript za pomocą programu ładującego skrypty WordPressa
    • Użyj haków wp_footer lub wp_head, aby dodać skrypt inline
    • Użyj wtyczki, aby dodać skrypty nagłówka lub stopki
    • Zmodyfikuj swój motyw, aby uwzględnić skrypt (zły pomysł)
    • Użyj edytora postów WordPress (naprawdę zły pomysł, który nie jest wart omawiania)

Pierwsze dwie opcje wiążą się z użyciem haków WordPressa.

Hook ładujący skrypty wordpress:

				
					add_action( 'wp_enqueue_scripts', 'my_custom_script_load' ); // wywołanie akcji
function my_custom_script_load(){
  wp_enqueue_script( 'my-custom-script', plugin_dir_url( __FILE__ ) . '/custom-scripts', array( 'jquery' ) );
}
				
			

Dodanie kodu w footer / header wordpress (nie zalecane)

				
					add_action( 'wp_head', 'my_header_scripts' );
function my_header_scripts(){
  ?>
  <script>alert( 'Cześć!' ) </script>
  <?php
}
				
			

Dodawanie skryptów nagłówka i stopki za pomocą wtyczki

Zazwyczaj, kiedy trzeba dodać niestandardowy JavaScript to tylko dlatego, że trzeba dodać coś jak Google Analytics do WordPress

Są to bardzo proste operacje typu wytnij i wklej. 

Dla czegoś prostego jak to wtyczka jest dobrym wyborem.

Facebook, Google, Twitter lub ktokolwiek daje ci kod i mówi, aby wkleić go do nagłówka lub stopki witryny. 

Dla tradycyjnej statycznej witryny HTML, można dosłownie wkleić ten kod do nagłówka HTML lub stopki na każdej stronie.  W wordpress musimy wstrzyknąć ten kod programowo w stopce lub nagłówku. Istnieje wiele wtyczek dla skryptów nagłówka i stopki. 

Polecam wtyczkę Insert Headers And Footer. Jest łatwa w użyciu i działa.

 

Nie edytuj plików nagłówka lub stopki swojego motywu.

Każdy motyw WordPress ma plik szablonu header.php i footer.php. Te pliki powinny generować nagłówek i stopkę Twojego motywu. Technicznie mógłbyś po prostu wkleić tam kod śledzenia lub inny JavaScript. To by zadziałało, ale proszę nie rób tego.

Modyfikacja pliku motywu zostanie utracona, gdy zaktualizujesz swój szablon. Ponadto, jeśli kiedykolwiek zmienisz swój motyw, stracisz ten skrypt śledzący, co również nie jest dobrą informacją. 

Oddzielenie wszystkiego, co nie ma związku z tym, jak wygląda Twoja witryna, od motywu oznacza, że gdy zmienisz swój szablon, zmienią się tylko elementy wizualne i nie stracisz ważnej funkcjonalności.

 

Dodawanie JavaScript z hakami WordPressa

Jeśli potrafisz pisać niestandardowy kod, polecam stworzenie wtyczki WordPress.

Twoja strona internetowa się zmienia, dochodzą co jakiś czas nowe funkcjonalności, nie warto mieszać kodu php z js, to tylko zaśmieca witrynę.

				
					/**
 * Plugin Name: Scripts
 */
class ScriptsInit
{
    protected $script_ver = '1.1';
    
    public function __construct()
    {
        add_action('wp_head', array($this, 'header_scripts'));
        add_action('wp_footer', array($this, 'footer_scripts'));
        add_action('wp_enqueue_scripts', array($this, 'hook_script'));
    }

    public function header_scripts()
    {
        wp_enqueue_script('my-custom-script', plugin_dir_url(__FILE__) . '/custom-scripts', array('jquery'), $this->script_ver, false );
    }

    public function footer_scripts()
    {
        wp_enqueue_script('my-custom-script', plugin_dir_url(__FILE__) . '/custom-scripts2', array('jquery'), $this->script_ver, true);
    }

    public function hook_script()
    {
        wp_enqueue_script('my-custom-script', plugin_dir_url(__FILE__) . '/custom-scripts3', array('jquery'), $this->script_ver);
    }
    
}

new ScriptsInit();
				
			

Co zrobić jeżeli chcemy przekazać wartości z php do javascript?

				
					wp_enqueue_script( 'my-custom-script', plugin_dir_url( __FILE__ ) . '/js/script.js', array( 'jquery' ), '1.0', true );
wp_localize_script(
    'my-custom-script', // nazwa skryptu
    'custom_object', // nazwa obiektu w js
    array(
        'ajax_url'   =>  admin_url('admin-ajax.php'),  // przekazanie url admin-ajax.php
    )
);
				
			

W ten sposób w pliku javascript otrzymamy dostęp do adresu url pliku admin-ajax.php

W ten sposób możemy odczytać obiekt w pliku js:

				
					let ajax_url = custom_object.ajax_url
console.log(ajax_url);
				
			

Adres ajax_url pojawi nam się w konsoli.

W ten sposób dodaliśmy niestandardowy kod javascript do Twojej witryny wordpress.