Skip to content

Kõik WordPressist, veebiarendusest — ja mitte ainult

🚫 Kuidas WordPressi pluginaid valikuliselt teatud lehtedel ja postitustel keelata

🚫 Kuidas WordPressi pluginaid valikuliselt teatud lehtedel ja postitustel keelata

Iga WordPressi plugin lisab PHP-koodi, mis käivitub lehe laadimisel, tõmbab sisse skripte ja stiile ning teeb mõnikord täiendavaid andmebaasipäringuid. Mida rohkem pluginaid sul on, seda raskemaks su lehed muutuvad. Kuid probleem pole ainult koguses: isegi üksainus „jutukas" plugin nagu Contact Form 7 laadib vaikimisi oma .css- ja .js-failid igal lehel, kaasa arvatud lehtedel, kus vormi üldse pole.

CF7 arendajad tunnistavad avalikult, et plugin laadib ressursse igal pool, sest lühikood võib esineda ükskõik kus. See loogika pole ainult CF7-le omane; enamik pluginaid töötab samamoodi. Tulemus: sinu blogi avaleht laadib skripte galerii slaidiseansi jaoks, mida seal kunagi polnudki.

Hea uudis: WordPress võimaldab pluginate laadimist valikuliselt keelata ainult neil lehtedel, kus neid tegelikult vaja on. Käsitleme mõlemat lähenemist: programmeerimist (kasutades mu-pluginit koos option_active_plugins filtriga) ja pluginapõhist (Plugin Organizer, Perfmatters, Plugin Load Filter). Lõpus mõõdame tulemusi brauseri võrgumonitori abil.

💡 Kiire ülevaade:

  • Vali pluginaid kolme kriteeriumi alusel: arendaja maine, jõudlus koormuse all ja tegelik vajalikkus
  • Programmeerimise lähenemine: kirjuta PHP jupp, mis kasutab get_option('active_plugins') aktiivsete pluginate nimekirja saamiseks ja filtreerib neid lehe URL-i järgi
  • Mu-plugin: paiguta filter kausta /wp-content/mu-plugins/ nii, et see käivitub ENNE kõiki tavalisi pluginaid, keelates mittevajalikud lennult
  • Pluginapõhine lähenemine: Plugin Organizer ja Perfmatters pakuvad samade ülesannete jaoks visuaalset liidest, ilma et peaksid ühtki koodirida kirjutama
  • Mõõda efekti Chrome'i/Firefoxi DevToolsi abil: pärast filtreerimist HTTP-päringute arv väheneb ja laadimisaeg märgatavalt lüheneb

Kolm reeglit pluginate valimiseks

Enne pluginate laadimise filtreerimist veendu, et sinu saidi pluginad tõesti väärivad kohta wp_options-is. Kolm reeglit, mis säästavad peavalu ja serveriressursse.

Paigalda ainult kontrollitud pluginaid kogenud arendajatelt. Ava plugin WordPress.org-is ja kontrolli: aktiivsete paigalduste arv, hinnang, viimase uuenduse kuupäev ja lahendatud tugipiletite arv. Plugin, millel on 100 000+ paigaldust, hinnang 4,5+ ja uuendus viimase 3 kuu jooksul, on turvaline valik.

Plugin page in the WordPress directory

Eelista skaleeruvaid pluginaid. Kaks identse funktsionaalsusega pluginat võivad kiirust erinevalt mõjutada. Võrdle kandidaate brauseri inspektori (Network tab) või veebiteenuste abil nagu Google PageSpeed Insights, Pingdom ja GTmetrix; mõõda laadimisaega ja HTTP-päringute arvu enne ja pärast paigaldamist.

Ära hoia surnud raskust. Iga kasutamata plugin tähendab lisatud PHP-koodi igas päringus. Auditeeri perioodiliselt oma aktiivsete pluginate nimekirja ja eemalda need, milleta su sait hakkama saab. Kui plugin „võib kuue kuu pärast kasuks tulla", deaktiveeri ja kustuta see ning paigalda kuue kuu pärast värske versioon.

Reaalne näide: Contact Form 7

Contact Form 7 on suurepärane katsealune. See lisab igale lehele:

  • style.css vormi stiilide jaoks
  • scripts.js valideerimise ja saatmise loogika jaoks

Isegi kui lehel pole ühtegi [contact-form-7] lühikoodi, laaditakse mõlemad failid truult. Allolev ekraanipilt näitab Chrome'i DevToolsi võrgupaneeli, mis ei valeta:

Network panel showing Contact Form 7 plugin resources

Lahendus: kas muuta laadimisloogikat plugina sees (mis läheb uuendamisel katki) või keelata plugin valikuliselt kõigil lehtedel, välja arvatud see, kus seda vajad. Teine lähenemine on usaldusväärsem, seega keskendume sellele.

1. Samm. Aktiivsete pluginate nimekirja hankimine PHP abil

Enne filtreerimist pead mõistma, kus WordPress aktiivsete pluginate nimekirja hoiab. Need kõik asuvad wp_options tabelis, real võtmega active_plugins. Massiivi saad kätte üheainsa get_option funktsiooniga.

Lisa see kood Code Snippets pluginasse või oma plugin-faili (ära unusta pluginapäist faili algusesse):

1<?php
2/**
3 * Plugin Name: Active Plugins Lister
4 */
5
6add_shortcode( 'activeplugins', function() {
7 $active_plugins = get_option( 'active_plugins' );
8 $plugins = "";
9 if ( count( $active_plugins ) > 0 ) {
10 $plugins = "<ul>";
11 foreach ( $active_plugins as $plugin ) {
12 $plugins .= "<li>" . $plugin . "</li>";
13 }
14 $plugins .= "</ul>";
15 }
16 return $plugins;
17} );

Salvesta fail nimega active-plugins.php ja laadi see üles kataloogi /wp-content/plugins/. Loo testleht, lisa lühikood [activeplugins] ja saad nummerdatud nimekirja kõigist aktiivsetest pluginatest vormingus folder/file.php.

wp_options table with active plugins

Siin on, kuidas tulemus pärast lühikoodi lehele lisamist välja näeb:

List of active plugins via shortcode

Samm 2. Filtri option_active_plugins: sinu põhitööriist

Nüüd põhitööriistast: filter option_active_plugins. See kuulub filtrite perekonda option_$option_name ja käivitub iga kord, kui WordPress hangib andmebaasist mõne sätte väärtuse. Kuna aktiivsed pluginad on salvestatud sättena active_plugins, võimaldab see filter sul massiivi käigu pealt muuta: eemaldada soovimatuid pluginaid või lisada uusi.

Siin on minimaalne näide, mis aktiveerib programselt Advanced Custom Fieldsi (eeldusel, et plugin on juba paigaldatud):

1add_filter( 'option_active_plugins', function( $plugins ) {
2 $myplugin = "advanced-custom-fields/acf.php";
3 if ( ! in_array( $myplugin, $plugins ) ) {
4 $plugins[] = $myplugin;
5 }
6 return $plugins;
7} );

See kood lisab ACF-i aktiivsete pluginate nimekirja igal lehel. Pole just eriti praktiline, kuid põhimõte on selge: saad massiivi $plugins muuta, kuidas soovid.

Oluline märkus: filter peab käivituma enne tavalisi pluginaid, vastasel juhul loeb WordPress esmalt filtreerimata nimekirja. Selleks ongi mu-pluginad.

Samm 3. Loo mu-plugin valikuliseks keelamiseks

Must-use pluginad asuvad kataloogis /wp-content/mu-plugins/ ja käivituvad enne kõiki tavalisi pluginaid. Just seda meil vajagi: meie filter saab esimesena kontrolli.

On üks konks: WordPressi tingimuslikud sildid (is_page(), is_single() ja teised) ei tööta mu-pluginates, sest päringut pole veel parsitud, mistõttu tagastavad need kõik false. URL-i tuleb analüüsida käsitsi $_SERVER['REQUEST_URI'] kaudu.

Siin on kasutusvalmis mu-plugin, mis keelab Contact Form 7 kõigil lehtedel, välja arvatud /contact/:

1$request_uri = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );
2$is_admin = strpos( $request_uri, '/wp-admin/' );
3
4if ( false === $is_admin ) {
5 add_filter( 'option_active_plugins', function( $plugins ) {
6 global $request_uri;
7
8 $is_contact_page = strpos( $request_uri, '/contact/' );
9 $myplugin = "contact-form-7/wp-contact-form-7.php";
10 $k = array_search( $myplugin, $plugins );
11
12 if ( false !== $k && false === $is_contact_page ) {
13 unset( $plugins[ $k ] );
14 }
15
16 return $plugins;
17 } );
18}

Analüüsime seda rida-realt:

  • parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH ) eraldab päringu tee (näiteks /blog/kak-otkljuchit-plaginy/)
  • strpos( $request_uri, '/wp-admin/' ) kontrollib, kas oleme administraatoriliideses; kui jah, siis filtrit ei rakendata, jättes pluginaseadete lehed ligipääsetavaks
  • array_search( $myplugin, $plugins ) leiab CF7 aktiivsete pluginate massiivist
  • unset( $plugins[ $k ] ) eemaldab plugina nimekirjast, kui me EI OLE kontaktilehel

Salvesta fail, laadi see üles kataloogi /wp-content/mu-plugins/ ja tühjenda vahemälu. Nüüd peaks lühikood [activeplugins] näitama Contact Form 7 ainult /contact/ lehel.

Siin on, kuidas sama põhimõte näeb välja mitme plugina korraga puhul. Ühe pluginaga array_search asemel kasuta massiivi ja funktsiooni array_diff:

1$request_uri = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );
2$is_admin = strpos( $request_uri, '/wp-admin/' );
3
4if ( false === $is_admin ) {
5 add_filter( 'option_active_plugins', function( $plugins ) {
6 global $request_uri;
7
8 $is_contact_page = strpos( $request_uri, '/contact/' );
9 $myplugins = array(
10 "contact-form-7/wp-contact-form-7.php",
11 "code-snippets/code-snippets.php",
12 "query-monitor/query-monitor.php",
13 "autoptimize/autoptimize.php"
14 );
15
16 if ( false === $is_contact_page ) {
17 $plugins = array_diff( $plugins, $myplugins );
18 }
19
20 return $plugins;
21 } );
22}

Funktsioon array_diff tagastab esimese massiivi väärtused, mida teises ei ole, just see, mida vajad hulgikaupa keelamiseks.

Tulemus on kohe nähtav võrgupaneelis: Contact Form 7 script.js fail kaob ressursside nimekirjast kõigilt lehtedelt, välja arvatud kontaktilehelt.

Page resource list without Contact Form 7 script

Programmeeritav lähenemine on paindlik, kuid nõuab iga uue plugina puhul koodimuudatusi. Neile, kes eelistavad visuaalset liidest, on olemas valmis filtripluginad.

Pluginipõhine lähenemine: filtreerimine ilma koodita

Plugin Load Filter

Plugin Load Filter on tasuta tööriist pluginate filtreerimiseks mitme tingimuse alusel. See toetab:

  • filtreerimist postituse tüübi järgi (postitused, lehed, kohandatud postitüübid)
  • filtreerimist postituse vormingu järgi
  • erandeid Jetpacki moodulitele
  • URL-i filtreerimist REST API, Heartbeat, AJAX ja AMP päringute jaoks
Plugin Load Filter interface

Filtri aktiveerimise seaded lehe tüübi järgi:

Page settings for plugin load filter

Pärast aktiveerimist seadistab administraator vahekaardi „Filter Activation by Page Type" kaudu, millistele lehtedele filter rakendub. Minimalistlik ja arusaadav.

Plugin Organizer

Plugin Organizer on filtreerimispluginatega veteran, millel on 5-tärni hinnang. See annab täieliku kontrolli laadimise üle:

  • valikuline pluginate keelamine lehe URL-i järgi
  • keelamine kasutajarolli järgi
  • pluginagrupid (partii kaupa lubamine/keelamine)
  • pluginate laadimisjärjekorra muutmine
Plugin Organizer global settings page

Lehel „Global Plugins" saate lohistada, et plugin kogu saidi jaoks globaalselt keelata ja see valikuliselt konkreetsetel lehtedel postituse redaktori metakasti kaudu uuesti lubada. Alloleval ekraanipildil on Contact Form 7 globaalselt keelatud:

Contact Form 7 globally disabled in Plugin Organizer

Ja siin on sama metakast kontaktilehe redigeerimisvaates, mis tühistab globaalsed seaded:

Plugin Organizer metabox on the contact page

Plugin Organizer kuvab ka silumisinfot: millised pluginad igal lehel tegelikult laaditi ja miks. Dokumentatsioon on saadaval arendaja veebisaidil.

Perfmatters

Perfmatters on Kinsta arendusmeeskonna tasuline tööriist. Selle põhifunktsioon Script Manager rühmitab kõik skriptid ja stiilid plugina või teema nime järgi.

Perfmatters Script Manager

Saate plugina täielikult keelata või eemaldada selle seest valikuliselt üksikuid CSS/JS faile. Keerulise URL-istruktuuriga saitide jaoks on olemas skriptide keelamine regulaaravaldiste abil.

Kolm stsenaariumi, kus Perfmatters annab kohest kasu:

  • Sotsiaalmeedia pluginad (jagamise nupud): keelatud kõikjal, välja arvatud blogipostitustes
  • Contact Form 7: keelatud kõikjal, välja arvatud vormi lehel
  • Gutenbergi plokiredaktori stiilid (block-library/style.min.css ja theme.min.css): eemaldatud saitidelt, mis kasutavad klassikalist redaktorit

Sõltumatus testis woorkup.com-is vähendas ebavajalike skriptide keelamine Perfmattersi abil kogu laadimisaega 20,2%, HTTP-päringuid avalehel 46-lt 30-le ja lehe suurust 506,3 KB-lt 451,6 KB-le.

Speed test results with Perfmatters

Perfmatters on tasuline plugin ja see on õigustatud saitidel, kus kiirus mõjutab otseselt konversiooni. Väikese blogi jaoks piisab Plugin Organizerist või programmeeritavast mu-pluginist.

Tulemuste mõõtmine brauseri võrgumonitori abil

Optimeerimine ilma mõõtmiseta on oletus. Brauseri arendajatööriistad (DevTools) annavad teile täpse enne-ja-pärast pildi ilma kolmandate osapoolte teenusteta. Iga kaasaegne brauser sobib:

Test-WordPressi installatsioonil 18 aktiivse pluginaga mõõtsime lehe kiirust enne filtreerimist (tühi vahemälu, Firefoxi võrgumonitor):

Firefox performance analysis before optimization

Tulemus: 255,19 KB, laadimisaeg 1,24 sekundit, 12 päringut.

Pärast Plugin Organizeri installimist ja Contact Form 7 globaalset keelamist muutus sektordiagramm:

Firefox performance analysis after disabling CF7

Mõõdikud: 104,21 KB, laadimisaeg 0,80 sekundit, 8 päringut.

Lõpuks keelasime kõik kasutamata pluginad:

Firefox performance analysis after full optimization

Lõpptulemus: 101,98 KB, laadimisaeg 0,46 sekundit, 8 päringut.

Äärmuste võrdlus: ressursimaht kahanes enam kui poole võrra (255-lt 102 KB-le), laadimisaeg langes 1,24-lt 0,46 sekundile ja HTTP-päringute arv vähenes 12-lt 8-le. Numbrid räägivad enda eest: valikuline pluginade keelamine annab märgatava kiirusvõidu isegi väikesel saidil ning TTFB ja LCP halvenemine mõjutab otseselt otsinguridu.

⁉️🤔 Korduma kippuvad küsimused

Kas mu-plugin on kohustuslik või võib koodi jätta tavalisse pluginasse?

Võid kasutada tavalist pluginat, kuid laadimisjärjekord võib kõik ära rikkuda. Kui sinu option_active_plugins filter käivitub pärast seda, kui WordPress on aktiivsete pluginade nimekirja juba lugenud, siis see ei tööta. Mu-plugin on ainus viis tagada, et sinu filter saab kontrolli enne kõiki teisi pluginaid. Tavalises pluginas sõltud sa tähestikulisest järjekorrast või konksudest, mis võivad muutuda pärast mistahes teise plugina uuendamist.

Mida teha, kui ma ei saa majutusteenusel mu-plugins kausta luua?

Kausta /wp-content/mu-plugins/ saad luua FTP, majutusteenuse failihalduri või WP-CLI kaudu käsuga wp scaffold mu-plugin. Kui sul puudub igasugune failisüsteemi ligipääs, kasuta Plugin Organizerit: see teeb sama asja oma filtreerimismehhanismi kaudu ega nõua serverifailide muutmist. Enamik majutusteenuse pakkujaid annab juurdepääsu wp-content kaustale juhtpaneeli failihalduri kaudu. Kausta õigused: 0755.

Kas plugina keelamine filtri kaudu mõjutab selle seadeid?

Ei, plugina seaded on salvestatud andmebaasi (wp_options tabel) ja jäävad puutumata. Sa lihtsalt takistad WordPressil plugina koodi laadimist konkreetse päringu töötlemisel. Kõik seaded jäävad paika ja järgmisel päringul, kus pluginat ei filtreerita, laaditakse see täieliku funktsionaalsusega. option_active_plugins kaudu keelamine blokeerib konkreetselt koodi laadimise käigu pealt, mitte ei deaktiveeri pluginat. Haldusliideses jääb plugin aktiivseks, selle seadeid ei puudutata ja ajastatud toimingud (WP-Cron) jätkavad tööd.

Kuidas kontrollida, kas filter tegelikult töötab?

Kõige visuaalsem meetod on Chrome DevToolsi Network paneel (F12 → Network). Ava see lehel, kus plugin peaks olema keelatud, värskenda Ctrl all hoides (tühjenda vahemälu) ja otsi plugina nime või selle CSS/JS faili. Kui päringuid pole, siis filter töötab. Pluginad nagu Query Monitor näitavad samuti laaditud komponentide loendit ja nende täitmisaega. Contact Form 7 puhul trüki Network otsingusse contact-form-7; kui filter töötas, ei näe sa CF7 style.css ega scripts.js laaditud ressursside nimekirjas.

Kas on mõtet pluginaid keelata väga väikesel saidil, kus on ainult 5-7 pluginat?

Kui kõiki 5 pluginat on tõepoolest igal lehel vaja, siis ei ole. Kuid isegi väikesel saidil on sageli paar pluginat, mis töötavad ainult ühel lehel: kontaktvorm, portfooliogalerii, avalehe slider. Selle paari keelamine teistel lehtedel vähendab märgatavalt HTTP-päringuid ja kiirendab laadimist. Nagu eespool testpaigaldusel nägime, võtab isegi ühe plugina filtreerimine maha kümneid millisekundeid. Saidi puhul, millel on 1000+ igapäevast külastajat, annavad need millisekundid kokku märgatava erinevuse nii kasutaja kui ka Core Web Vitalsi jaoks.

Kood, plugin või Perfmatters: mida oma ülesande jaoks valida

Kui sinu saidil on 5 pluginat ja kõiki neid on tõepoolest igal lehel vaja, pole see juhend sulle. Kuid tüüpiline WordPressi sait tõmbab sisse 15-25 aktiivset pluginat, millest tegelikult töötab igal konkreetsel lehel vaid 5-7. Ülejäänud lihtsalt tarbivad serveriaega ja aeglustavad laadimist.

Programmeeritav mu-plugin on tasuta, kerge ja täielikult kontrollitav lähenemine, kuid nõuab tähelepanu iga uue plugina puhul. Plugin Organizer on kuldne kesktee: visuaalne liides, paindlikkus ja tasuta. Perfmatters on valik äriprojektidele, kus iga kümnendiksekund laadimisajas tähendab raha.

Kui oled kogunud rohkem pluginaid kui vaja, alusta auditist ja kasutute eemaldamisest, seejärel võta kontroll allesjäänute laadimise üle. Vali lähenemine mugavustaseme ja saidi koormuse järgi ning sa näed erinevust juba oma esimesel Network mõõtmisel. Ära oota, kuni pluginad su TTFB ära söövad.