Załaduj minimalne środowisko WordPress

12

Zrobiłem własną usługę przesyłania dla mojej witryny, która jest niezależna od WP, ​​ale używa WP do zapewnienia niskopoziomowych funkcji db i weryfikacji użytkownika. Aby to zrobić, dołączam wp-load.php do mojego głównego skryptu (Uploadify), ale wydaje się, że wypełnianie pamięci serwera niepotrzebnymi komponentami. Dzięki temu widzę błąd w moim skrypcie, który wydaje się wskazywać na zainstalowaną wtyczkę WP.

Jak mogę załadować tylko podstawowe komponenty WP i zignorować wtyczki? Czy to w ogóle możliwe?

MechEngineer
źródło
1
Sprawdź BackPress .
soulseekah

Odpowiedzi:

9

Całkowite wyłączenie wtyczek oznacza utratę wielu zalet.

Istnieją dystrybucje wordpress, które idą dalej i wyrywają posty i linki itp., Ale zawsze będą opóźnione w stosunku do rdzenia WordPress i zwykle nie przetrwają tak długo.

Oto kilka rzeczy, które można zrobić

Krótki inicjał

Umieszczenie tego w pliku wp-config.php:

define( 'SHORTINIT', TRUE );

Lub zdefiniowanie go gdzieś przed załadowaniem w wordpressie, powinno skrócić proces ładowania i przywrócić go do minimum podstawowych funkcji.

Drugorzędne lekkie instalacje

Skonfiguruj drugą instalację wordpress, używając tylko wtyczek i motywów, które chcesz (jeśli istnieją). Następnie skonfiguruj plik wp-config.php, aby używał tych samych wartości katalogu treści i bazy danych wp.

Backpress

WordPress, oryginalny BBpress i glotpress, między innymi, są zbudowane wokół biblioteki BackPress. Możesz użyć tego zamiast WordPressa do wykonania swojej pracy, chociaż brakuje wielu interfejsów API i funkcji lub wymaga ponownej implementacji / przenoszenia

Tabele opcji

Chciałbym również pamiętać, że WordPress ładuje całą tabelę opcji do pamięci, aby zmniejszyć liczbę zapytań, jeśli zapisujesz tam duże wartości, wpłynie to na wydajność.

Wyjście wcześnie

Możesz także spróbować podłączyć się do wcześniejszych funkcji w procesie ładowania WordPress i wyjść z procesu PHP przed zakończeniem WordPress, ale nie mogę doradzić, jak bezpieczne byłoby to.

Selektywne ładowanie wtyczek

Jest też ten artykuł na temat selektywnego ładowania wtyczek , ale wymaga włamań do podstawowych plików wordpress

Tom J Nowell
źródło
+1 Czy kiedykolwiek próbowałeś „Wtórne lekkie instalacje” ?
kaiser
Zrobiłem podobne rzeczy, choć nigdy w tym celu, większość przypadków użycia byłoby lepiej obsługiwanych przez wiele witryn. Głównie go używam, więc mogę mieć uruchomioną instalację programistyczną, aby dzielić się treścią
Tom J Nowell
8

Użyj BackPress , ale mam małe zmiany, w których używam domyślnej instalacji i mniejszego źródła poprzez const.

patrz na wp-settings.php

// Stop most of WordPress from being loaded if we just want the basics.
if ( SHORTINIT )
    return false;

Ustaw const SHORTINIT na true w wp-config.phpi zobacz szybki bieg. define( 'SHORTINIT', TRUE );

Oto pliki, które otrzymujesz:

// All are located in ABSPATH.WPINC
'/load.php'
'/default-constants.php'
'/version.php'
'/compat.php'
'/functions.php'
'/class-wp.php'
'/class-wp-error.php'
'/plugin.php'
'/default-filters.php'
'/pomo/mo.php'

// Only Multisite
'/ms-blogs.php'
'/ms-settings.php'
bueltge
źródło
6

Do tworzenia is_user_logged_in()i current_user_can()pracy znalazłem podobną odpowiedź tutaj (komentarz Cant). Porównanie odpowiada tutaj odpowiedziom, ponieważ:

Ręczne używanie define('SHORTINIT', true)+ require('wp-load.php')+ obejmuje:

Ładowanie strony: 1,05 sek - dołączone pliki: 43 pliki

Porównywanie: TYLKO require('wp-load.php') :

Ładowanie strony: 1,35 sek - dołączone pliki: 419 plików

Różnica czasu (0,3 sek) może różnić się od instalacji i silników PHP, ale podczas sprawdzania poprawności wielu żądań na jednym ładowaniu strony sumuje się! / @ Anna Ericson

Dobrym pomysłem było użycie względnego wywołania do katalogu zainstalowanego WP. Z niestandardowej wtyczki Wordpress „ROOT”, takiej jak:

$wordpress = '../../../wp-load.php';

Następnie wewnątrz mojej wtyczki index.php:

define('SHORTINIT', true);
include_once $wordpress;

require_once ( ABSPATH . WPINC . '/class-wp-user.php' );
require_once ( ABSPATH . WPINC . '/class-wp-roles.php' );
require_once ( ABSPATH . WPINC . '/class-wp-role.php' );
require_once ( ABSPATH . WPINC . '/class-wp-session-tokens.php' );
require_once ( ABSPATH . WPINC . '/class-wp-user-meta-session-tokens.php' );
require_once ( ABSPATH . WPINC . '/formatting.php' );
require_once ( ABSPATH . WPINC . '/capabilities.php' );
//require_once ( ABSPATH . WPINC . '/query.php' ); // - might be useful
require_once ( ABSPATH . WPINC . '/user.php' );
require_once ( ABSPATH . WPINC . '/meta.php' );

wp_cookie_constants();

require_once ( ABSPATH . WPINC . '/vars.php' );
require_once ( ABSPATH . WPINC . '/kses.php' );
require_once ( ABSPATH . WPINC . '/rest-api.php' );
require_once ( ABSPATH . WPINC . '/pluggable.php' );

Po tym sprawdzanie poprawności użytkownika działa dla mnie. Dzięki ostatnim słowom @Anna Ericson z oryginalnego kodu:

W przypadku innego zadania, uruchomionego na jednym lub dwóch żądaniach, śledzenie innych potrzebnych plików może nie być warte 0,3 sek . Pomiń SHORTINIT stały i ręcznie bałagan.

cavameta
źródło
1
To jak dotąd najczystszy sposób. Działa dobrze w przypadku wywołań ajax ładujących ograniczone obrazy w naszej instalacji.
Jonas Lundman
@cavameta Czy importujesz Woocommerce do wok za pomocą SHORTINIT?
webmastx
2

Próbowałeś define('SHORTINIT', true);? Nie testowałem tego sam, ale wydaje się, że ładuje bardzo mało aspektów rdzenia WP, zachowując wystarczającą funkcjonalność, szczególnie jeśli wszystko, czego potrzebujesz, to radzenie sobie z bazą danych.

Tomas Buteler
źródło