Muat lingkungan WordPress minimum

12

Saya membuat layanan unggahan saya sendiri untuk situs web saya yang terpisah dari WP, tetapi menggunakan WP untuk menyediakan fungsi db tingkat rendah dan verifikasi pengguna. Untuk melakukan itu, saya memasukkan wp-load.php dalam skrip utama saya (Uploadify) tetapi melakukan itu tampaknya mengisi memori server dengan komponen yang tidak perlu. Berkat itu, saya melihat kesalahan pada skrip saya yang sepertinya menunjuk ke plugin WP yang diinstal.

Bagaimana saya bisa memuat hanya komponen WP inti dan mengabaikan plugin? Apakah ini mungkin?

MechEngineer
sumber
1
Lihat BackPress .
soulseekah

Jawaban:

9

Menonaktifkan plugin sepenuhnya berarti Anda kehilangan banyak keuntungan.

Ada distribusi wordpress yang melangkah lebih jauh dan merobek posting dan tautan dll, tetapi mereka akan selalu tertinggal di belakang inti WordPress dan cenderung tidak bertahan selama.

Berikut beberapa hal yang bisa dilakukan

Init pendek

Menempatkan ini di wp-config.php Anda:

define( 'SHORTINIT', TRUE );

Atau mendefinisikannya di suatu tempat sebelum Anda memuat di wordpress, harus mengurangi proses memuat dan menariknya kembali ke fungsi inti minimal.

Instalasi ringan sekunder

Setup instalasi wordpress kedua, dengan hanya plugin dan tema yang Anda inginkan (jika ada). Kemudian konfigurasikan wp-config.php untuk menggunakan direktori dan nilai database wp-content yang sama.

Backpress

WordPress, BBpress asli dan glotpress di antaranya dibangun di sekitar perpustakaan BackPress. Anda dapat menggunakan ini alih-alih WordPress untuk melakukan pekerjaan Anda meskipun banyak API dan fitur mungkin hilang atau membutuhkan implementasi ulang / porting

Tabel opsi

Saya juga ingat bahwa WordPress memuat seluruh tabel opsi ke dalam memori untuk mengurangi kueri, jika Anda menyimpan nilai besar di sana, itu akan berdampak pada kinerja.

Keluar lebih awal

Anda juga dapat mencoba menghubungkan ke fungsi-fungsi sebelumnya dalam proses memuat WordPress dan keluar dari proses PHP sebelum WordPress selesai, tetapi saya tidak bisa memberi nasihat tentang seberapa aman itu nantinya.

Memuat plugin secara selektif

Ada juga artikel ini tentang memuat plugin secara selektif , tetapi memang membutuhkan peretasan ke file inti wordpress

Tom J Nowell
sumber
+1 Pernah mencoba "Instalasi ringan sekunder" ?
kaiser
Saya telah melakukan hal serupa, meskipun tidak pernah untuk tujuan ini, kebanyakan kasus penggunaan akan lebih baik dilayani oleh multisite. Terutama saya menggunakannya sehingga saya dapat memiliki instalasi pengembangan berjalan bersama sehingga mereka berbagi konten
Tom J Nowell
8

Gunakan BackPress , tetapi saya memiliki perkembangan kecil, di mana saya menggunakan instalasi default dan sumber yang lebih kecil melalui const.

lihat di wp-settings.php

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

Setel const SHORTINIT pada true di wp-config.phpdan lihat fast run. define( 'SHORTINIT', TRUE );

Ini adalah file yang Anda dapatkan:

// 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
sumber
6

Untuk membuat is_user_logged_in()dan current_user_can()bekerja, saya menemukan jawaban serupa di sini (Cant comment) Perbandingan ini cocok dengan jawaban di sini, seperti:

Menggunakan define('SHORTINIT', true)+ require('wp-load.php')+ secara manual meliputi:

Pageload: 1,05 sek - file yang disertakan: 43 file

Membandingkan: HANYA MENGGUNAKAN require('wp-load.php'):

Pageload: 1,35 sek - file yang disertakan: 419 file

Perbedaan waktu (0,3 sek) mungkin berbeda dari pemasangan dan mesin PHP, tetapi sementara memvalidasi banyak permintaan pada satu pageload - hal-hal bertambah! / @ Anna Ericson

Itu ide yang baik untuk menggunakan panggilan relatif ke WP diinstal dir. Dari plugin khusus Wordpress "ROOT" seperti:

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

Kemudian di dalam index.php plugin saya:

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' );

Setelah ini, validasi pengguna berfungsi untuk saya. Terima kasih kepada @Anna Ericson kata-kata terakhir dari kode asli:

Untuk tugas lain, menjalankan satu atau dua permintaan, melacak file lain yang diperlukan mungkin tidak bernilai 0,3 sek . Lewati SHORTINIT kekacauan konstan dan manual.

cavameta
sumber
1
Ini adalah cara terbersih sejauh ini. Bekerja dengan baik pada panggilan ajax memuat gambar yang dibatasi pada instalasi kami.
Jonas Lundman
@cavameta Apakah Anda cara mengimpor Woocommerce ke wajan dengan SHORTINIT?
webmastx
2

Sudahkah Anda mencoba define('SHORTINIT', true);? Saya belum mengujinya sendiri, tetapi tampaknya memuat sangat sedikit aspek WP core sambil mempertahankan fungsionalitas yang cukup, terutama jika semua yang Anda inginkan adalah berurusan dengan database.

Tomas Buteler
sumber