Skip to content

Kaikki WordPressistä, web-kehityksestä — ja paljon muuta

🚫 Kuinka poistaa wordpress-lisäosat valikoivasti käytöstä tietyillä sivuilla ja artikkeleissa

🚫 Kuinka poistaa wordpress-lisäosat valikoivasti käytöstä tietyillä sivuilla ja artikkeleissa

Jokainen WordPress-lisäosa lisää PHP-koodia, joka suoritetaan sivun latauksessa, hakee skriptejä ja tyylejä ja tekee joskus ylimääräisiä tietokantakyselyitä. Mitä enemmän lisäosia sinulla on, sitä raskaammiksi sivusi muuttuvat. Mutta ongelma ei ole pelkkä määrä: yksikin "puhelias" lisäosa, kuten Contact Form 7, lataa .css- ja .js-tiedostonsa oletuksena jokaisella sivulla, myös sivuilla, joilla ei ole lainkaan lomaketta.

CF7:n kehittäjät myöntävät avoimesti, että lisäosa lataa resursseja kaikkialla, koska shortcode voi esiintyä missä tahansa. Tämä logiikka ei koske vain CF7:ää; useimmat lisäosat toimivat samalla tavalla. Lopputulos: blogisi etusivu lataa skriptit galleriaslideria varten, jota siellä ei alun perinkään ollut.

Hyvä uutinen: WordPress antaa sinun estää lisäosien lataamisen valikoivasti vain niillä sivuilla, joilla niitä oikeasti tarvitaan. Käsittelemme molemmat lähestymistavat: ohjelmallisen (käyttäen mu-pluginia ja option_active_plugins-suodatinta) ja lisäosapohjaisen (Plugin Organizer, Perfmatters, Plugin Load Filter). Lopuksi mittaamme tulokset selaimen verkkomonitorilla.

💡 Pikaopas:

  • Valitse lisäosat kolmen kriteerin perusteella: kehittäjän maine, suorituskyky kuormitettuna ja todellinen tarpeellisuus
  • Ohjelmallinen lähestymistapa: kirjoita PHP-pätkä, joka käyttää get_option('active_plugins')-funktiota hakeakseen aktiivisten lisäosien listan ja suodattaa ne sivun URL-osoitteen mukaan
  • Mu-plugin: sijoita suodatin hakemistoon /wp-content/mu-plugins/, jotta se suoritetaan ENNEN kaikkia tavallisia lisäosia ja poistaa tarpeettomat lennosta
  • Lisäosalähestymistapa: Plugin Organizer ja Perfmatters tarjoavat visuaalisen käyttöliittymän samoihin tehtäviin ilman yhtäkään riviä koodia
  • Mittaa vaikutus Chrome/Firefox DevToolsilla: suodatuksen jälkeen HTTP-pyynnöt vähenevät ja latausaika lyhenee huomattavasti

Kolme sääntöä lisäosien valintaan

Ennen kuin suodatat lisäosien lataamista, varmista, että sivustosi lisäosat todella ansaitsevat paikkansa wp_options-taulussa. Kolme sääntöä, jotka säästävät sinut päänsäryltä ja palvelinresursseilta.

Asenna vain varmennettuja lisäosia kehittäjiltä, joilla on näyttöjä. Avaa lisäosan sivu WordPress.orgissa ja tarkista: aktiivisten asennusten määrä, arvosana, viimeisin päivityspäivä ja ratkaistujen tukipyyntöjen määrä. Lisäosa, jolla on yli 100 000 asennusta, arvosana yli 4,5 ja päivitys viimeisen 3 kuukauden aikana, on turvallinen valinta.

Plugin page in the WordPress directory

Suosi skaalautuvia lisäosia. Kaksi toiminnaltaan samanlaista lisäosaa voivat vaikuttaa nopeuteen eri tavoin. Vertaa ehdokkaita selaimen inspectorilla (Network-välilehti) tai verkkopalveluilla, kuten Google PageSpeed Insights, Pingdom ja GTmetrix; mittaa latausaika ja HTTP-pyyntöjen määrä ennen asennusta ja sen jälkeen.

Älä pidä kuollutta painoa. Jokainen käyttämätön lisäosa tarkoittaa ylimääräistä PHP-koodia jokaisessa pyynnössä. Tarkasta aktiivisten lisäosien lista säännöllisesti ja poista ne, joita sivustosi ei oikeasti tarvitse. Jos lisäosa "saattaa olla hyödyllinen puolen vuoden päästä", poista se käytöstä ja asenna tuore versio puolen vuoden kuluttua.

Tosielämän esimerkki: Contact Form 7

Contact Form 7 on täydellinen testikohde. Se lisää jokaiselle sivulle:

  • style.css lomakkeen tyylejä varten
  • scripts.js validointia ja lähetyslogiikkaa varten

Vaikka sivulla ei olisi [contact-form-7]-shortcodea, molemmat tiedostot latautuvat uskollisesti. Alla oleva kuvakaappaus näyttää Chrome DevToolsin Network-paneelin, joka ei valehtele:

Verkkonäkymä Contact Form 7 -lisäosan resursseista

Ratkaisu: joko muokata latauslogiikkaa lisäosan sisällä (mikä hajoaa päivityksessä) tai estää lisäosa valikoivasti kaikilta sivuilta paitsi siltä, jolla sitä tarvitset. Jälkimmäinen lähestymistapa on luotettavampi, joten keskitytään siihen.

Vaihe 1. Hae aktiivisten lisäosien lista PHP:llä

Ennen suodatusta sinun on ymmärrettävä, mihin WordPress tallentaa aktiivisten lisäosien listan. Ne ovat kaikki wp_options-taulussa, rivillä, jonka avain on active_plugins. Voit hakea taulukon yhdellä get_option-funktiolla.

Lisää tämä koodi Code Snippets -lisäosaan tai omaan lisäosatiedostoosi (älä unohda lisäosan otsaketta tiedoston alussa):

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

Tallenna tiedosto nimellä active-plugins.php ja siirrä se hakemistoon /wp-content/plugins/. Luo testisivu, lisää shortcode [activeplugins], niin saat numeroidun listan kaikista aktiivisista lisäosista muodossa folder/file.php.

wp_options-taulun aktiiviset lisäosat

Tältä tulos näyttää, kun shortcode on lisätty sivulle:

Lista aktiivisista lisäosista shortcodella

Vaihe 2. option_active_plugins-suodatin: päätyökalusi

Sitten päätyökaluun: option_active_plugins-suodatin. Se kuuluu option_$option_name-suodatinperheeseen ja käynnistyy aina, kun WordPress hakee tietokannasta asetuksen arvon. Koska aktiiviset lisäosat tallennetaan active_plugins-asetuksena, tällä suodattimella voit muokata taulukkoa lennossa: poistaa turhia lisäosia tai lisätä uusia.

Tässä minimaalinen esimerkki, joka aktivoi Advanced Custom Fieldsin ohjelmallisesti (olettaen, että lisäosa on jo asennettu):

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

Tämä koodi lisää ACF:n aktiivisten lisäosien listaan jokaisella sivulla. Ei erityisen käytännöllistä, mutta periaate on selvä: voit muokata $plugins-taulukkoa miten haluat.

Tärkeä huomio: suodattimen on suoritettava ennen tavallisia lisäosia, muuten WordPress lukee suodattamattoman listan ensin. Sitä varten mu-lisäosat ovat olemassa.

Vaihe 3. Luo mu-lisäosa valikoivaa käytöstä poistamista varten

Must-use-lisäosat sijaitsevat hakemistossa /wp-content/mu-plugins/ ja suoritetaan ennen kaikkia tavallisia lisäosia. Juuri mitä tarvitsemme: suodattimemme saa hallinnan ensin.

Yksi juju tässä on: WordPressin ehdolliset tagit (is_page(), is_single() ja muut) eivät toimi mu-lisäosissa, koska pyyntöä ei ole vielä jäsennetty, joten ne kaikki palauttavat arvon false. URL-osoite on analysoitava manuaalisesti $_SERVER['REQUEST_URI']-muuttujan avulla.

Tässä on käyttövalmis mu-lisäosa, joka poistaa Contact Form 7:n käytöstä kaikilla sivuilla paitsi /contact/-sivulla:

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}

Puretaan se rivi riviltä:

  • parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH ) poimii pyynnön polun (esimerkiksi /blog/kak-otkljuchit-plaginy/)
  • strpos( $request_uri, '/wp-admin/' ) tarkistaa, olemmeko hallintapuolella; jos olemme, suodatinta ei sovelleta, jolloin lisäosien asetussivut pysyvät käytettävissä
  • array_search( $myplugin, $plugins ) etsii CF7:n aktiivisten lisäosien taulukosta
  • unset( $plugins[ $k ] ) poistaa lisäosan listalta, jos emme OLE yhteystietosivulla

Tallenna tiedosto, siirrä se hakemistoon /wp-content/mu-plugins/ ja tyhjennä välimuisti. Nyt [activeplugins]-shortcoden pitäisi näyttää Contact Form 7 vain /contact/-sivulla.

Tältä sama periaate näyttää usealle lisäosalle kerralla. Yhden lisäosan array_search-funktion sijaan käytä taulukkoa ja array_diff-funktiota:

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}

array_diff-funktio palauttaa arvot ensimmäisestä taulukosta, joita ei ole toisessa, juuri mitä tarvitset massapoistoon.

Tulos näkyy välittömästi Network-paneelissa: Contact Form 7:n script.js-tiedosto katoaa resurssilistalta kaikilta sivuilta paitsi yhteystietosivulta.

Sivun resurssilista ilman Contact Form 7:n skriptiä

Ohjelmallinen lähestymistapa on joustava, mutta vaatii koodimuutoksia jokaiselle uudelle lisäosalle. Niille, jotka suosivat visuaalista käyttöliittymää, on olemassa valmiita suodatinlisäosia.

Lisäosapohjainen lähestymistapa: suodatus ilman koodia

Plugin Load Filter

Plugin Load Filter on ilmainen työkalu lisäosien suodattamiseen useiden ehtojen perusteella. Se tukee:

  • suodatusta sisältötyypin mukaan (artikkelit, sivut, mukautetut sisältötyypit)
  • suodatusta artikkelimuodon mukaan
  • poikkeuksia Jetpack-moduuleille
  • URL-suodatusta REST API-, Heartbeat-, AJAX- ja AMP-pyynnöille
Plugin Load Filter -käyttöliittymä

Asetukset suodattimen aktivoimiseksi sivutyypin mukaan:

Plugin load filterin sivukohtaiset asetukset

Aktivoinnin jälkeen ylläpitäjä määrittää, mille sivuille suodatinta sovelletaan, "Filter Activation by Page Type" -välilehdellä. Pelkistetty ja suoraviivainen.

Plugin Organizer

Plugin Organizer on veteraani suodatuslisäosien joukossa, ja sillä on 5 tähden arvosana. Se antaa täyden hallinnan lataamiseen:

  • lisäosien valikoiva poistaminen käytöstä sivun URL-osoitteen perusteella
  • käytöstä poistaminen käyttäjäroolin perusteella
  • lisäosaryhmät (erän käyttöönotto tai poistaminen kerralla)
  • lisäosien latausjärjestyksen muuttaminen
Plugin Organizerin yleiset asetukset

"Global Plugins" -sivulla voit raahata ja pudottaa poistaaksesi lisäosan käytöstä koko sivustolla ja ottaa sen valikoivasti uudelleen käyttöön tietyillä sivuilla artikkelieditorin metaboksin kautta. Alla olevassa kuvakaappauksessa Contact Form 7 on poistettu käytöstä koko sivustolla:

Contact Form 7 poistettu käytöstä globaalisti Plugin Organizerissa

Ja tässä on sama metaboksi yhteystietosivun muokkausnäkymässä, joka ohittaa yleiset asetukset:

Plugin Organizerin metabox yhteystietosivulla

Plugin Organizer näyttää myös virheenkorjaustietoja: mitkä lisäosat todella latautuivat kullakin sivulla ja miksi. Dokumentaatio on saatavilla kehittäjän verkkosivustolla.

Perfmatters

Perfmatters on Kinstan kehitystiimin maksullinen työkalu. Sen pääominaisuus, Script Manager, ryhmittelee kaikki skriptit ja tyylitiedostot lisäosan tai teeman nimen mukaan.

Perfmatters Script Manager

Voit poistaa liitännäisen kokonaan käytöstä tai poistaa valikoivasti sen yksittäisiä CSS/JS-tiedostoja. Sivustoille, joilla on monimutkaisia URL-rakenteita, on tarjolla skriptien poisto käytöstä säännöllisten lausekkeiden avulla.

Kolme tilannetta, joissa Perfmatters tuo välittömiä hyötyjä:

  • Some-liitännäiset (jakopainikkeet): poistettu käytöstä kaikkialla paitsi blogiartikkeleissa
  • Contact Form 7: poistettu käytöstä kaikkialla paitsi lomakesivulla
  • Gutenberg-lohkoeditorin tyylit (block-library/style.min.css ja theme.min.css): poistettu sivustoilta, jotka käyttävät klassista editoria

Riippumattomassa testissä woorkup.com-sivustolla tarpeettomien skriptien poistaminen käytöstä Perfmattersin avulla lyhensi kokonaislatausaikaa 20,2%, vähensi etusivun HTTP-pyyntöjä 46:sta 30:een ja sivun kokoa 506,3 kt:sta 451,6 kt:aan.

Nopeustestin tulokset Perfmattersilla

Perfmatters on maksullinen liitännäinen, ja se on perusteltu sivustoilla, joilla nopeus vaikuttaa suoraan konversioon. Pienelle blogille Plugin Organizer tai ohjelmallinen mu-liitännäinen riittää.

Tulosten mittaaminen selaimen verkkomonitorilla

Optimointi ilman mittaamista on arvailua. Selainten DevTools antaa tarkan ennen-jälkeen-kuvan ilman kolmannen osapuolen palveluita. Mikä tahansa moderni selain käy:

Testi-WordPress-asennuksessa, jossa oli 18 aktiivista liitännäistä, mittasimme sivun nopeuden ennen suodatusta (tyhjä välimuisti, Firefox Network Monitor):

Firefoxin suorituskykyanalyysi ennen optimointia

Tulos: 255,19 kt, latausaika 1,24 sekuntia, 12 pyyntöä.

Plugin Organizerin asentamisen ja Contact Form 7:n yleisen käytöstä poistamisen jälkeen piirakkakaavio muuttui:

Firefoxin suorituskykyanalyysi CF7:n poistamisen jälkeen

Mittarit: 104,21 kt, latausaika 0,80 sekuntia, 8 pyyntöä.

Lopuksi poistimme käytöstä kaikki tarpeettomat liitännäiset:

Firefoxin suorituskykyanalyysi täyden optimoinnin jälkeen

Lopputulos: 101,98 kt, latausaika 0,46 sekuntia, 8 pyyntöä.

Kun verrataan ääripäitä: resurssien koko putosi yli puolella (255 kt:sta 102 kt:een), latausaika tippui 1,24 sekunnista 0,46 sekuntiin ja HTTP-pyynnöt vähenivät 12:sta 8:aan. Luvut puhuvat puolestaan: valikoiva lisäosien poiskytkentä tuo huomattavia nopeushyötyjä jopa pienellä sivustolla, ja TTFB:n ja LCP:n heikkeneminen vaikuttaa suoraan hakusijoituksiin.

⁉️🤔 Usein kysytyt kysymykset

Onko mu-plugin pakollinen, vai voinko jättää koodin tavalliseen lisäosaan?

Voit käyttää tavallista lisäosaa, mutta latausjärjestys voi pilata kaiken. Jos option_active_plugins-suodattimesi ajetaan sen jälkeen, kun WordPress on jo lukenut aktiivisten lisäosien listan, se ei toimi. Mu-plugin on ainoa tapa varmistaa, että suodattimesi saa hallinnan ennen kaikkia muita lisäosia. Tavallisessa lisäosassa olet riippuvainen aakkosjärjestyksestä tai koukuista, jotka voivat muuttua minkä tahansa lisäosapäivityksen yhteydessä.

Entä jos en voi luoda mu-plugins-kansiota hostingissani?

Voit luoda /wp-content/mu-plugins/-kansion FTP:n, hosting-palvelusi tiedostonhallinnan tai WP-CLI:n kautta komennolla wp scaffold mu-plugin. Jos sinulla ei ole lainkaan pääsyä tiedostojärjestelmään, käytä Plugin Organizeria: se tekee saman asian oman suodatusmekanisminsa kautta eikä vaadi palvelintiedostojen muokkaamista. Useimmat hosting-palveluntarjoajat antavat pääsyn wp-contentiin hallintapaneelin tiedostonhallinnan kautta. Kansion oikeudet: 0755.

Vaikuttaako lisäosan poiskytkentä suodattimen kautta sen asetuksiin?

Ei, lisäosien asetukset on tallennettu tietokantaan (wp_options-taulu) ja ne säilyvät koskemattomina. Estät vain WordPressiä lataamasta lisäosan koodia tietyn pyynnön käsittelyn aikana. Kaikki asetukset pysyvät paikoillaan, ja seuraavalla pyynnöllä, jossa lisäosaa ei suodateta, se latautuu täydellä toiminnallisuudella. option_active_plugins-kautta poiskytkentä estää nimenomaan koodin lataamisen lennossa, ei deaktivoi lisäosaa. Hallinta-alueella lisäosa pysyy aktiivisena, sen asetuksiin ei kosketa ja ajastetut tehtävät (WP-Cron) jatkavat toimintaansa.

Miten varmistan, että suodatin todella toimii?

Visuaalisin tapa on Chrome DevToolsin Network-välilehti (F12 → Network). Avaa se sivulla, jolla lisäosan pitäisi olla pois käytöstä, päivitä Ctrl pohjassa (tyhjennä välimuisti) ja hae lisäosan nimellä tai sen CSS/JS-tiedostolla. Jos pyyntöjä ei näy, suodatin toimii. Lisäosat kuten Query Monitor näyttävät myös ladattujen komponenttien listan ja niiden suoritusajan. Contact Form 7:n kohdalla kirjoita Network-hakuun contact-form-7; jos suodatin toimi, et näe CF7:n style.css- tai scripts.js-tiedostoja ladattujen resurssien listassa.

Onko lisäosien poiskytkennässä mitään järkeä hyvin pienellä sivustolla, jossa on vain 5-7 lisäosaa?

Jos kaikkia viittä lisäosaa aidosti tarvitaan jokaisella sivulla, ei ole. Mutta pienelläkin sivustolla on usein pari lisäosaa, jotka toimivat vain yhdellä sivulla: yhteydenottolomake, portfoliogalleria, etusivun slider. Tämän parin poiskytkentä muilla sivuilla vähentää huomattavasti HTTP-pyyntöjä ja nopeuttaa latautumista. Kuten yllä testiasennuksessa näimme, jo yhden lisäosan suodattaminen leikkaa kymmeniä millisekunteja. Sivustolla, jolla on yli 1 000 päivittäistä kävijää, nuo millisekunnit kumuloituvat huomattavaksi eroksi sekä käyttäjälle että Core Web Vitals -mittareille.

Koodi, lisäosa vai Perfmatters: mitä valita omaan tarpeeseesi

Jos sivustollasi on 5 lisäosaa ja kaikkia niistä aidosti tarvitaan jokaisella sivulla, tämä opas ei ole sinua varten. Mutta tyypillinen WordPress-sivusto vetää mukanaan 15-25 aktiivista lisäosaa, joista vain 5-7 todella toimii millä tahansa yksittäisellä sivulla. Loput vain kuluttavat palvelinaikaa ja hidastavat latautumista.

Ohjelmallinen mu-plugin on ilmainen, kevyt ja täysin hallittavissa oleva lähestymistapa, mutta se vaatii huomiota jokaisen uuden lisäosan kohdalla. Plugin Organizer on kultainen keskitie: visuaalinen käyttöliittymä, joustavuus ja ilmainen. Perfmatters on valinta kaupallisiin projekteihin, joissa jokainen sekunnin kymmenys latausajassa muuntuu rahaksi.

Jos olet kerryttänyt enemmän lisäosia kuin tarvitset, aloita auditoinnilla ja turhien lisäosien siivouksella, ja ota sitten jäljelle jäävien lataus hallintaan. Valitse lähestymistapasi mukavuustason ja sivuston kuormituksen perusteella, niin näet eron heti ensimmäisessä Network-mittauksessasi. Älä odota, että lisäosat syövät TTFB:si.