{"id":233500,"date":"2023-02-15T20:18:00","date_gmt":"2023-02-15T17:18:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233500"},"modified":"2022-11-11T00:01:46","modified_gmt":"2022-11-10T21:01:46","slug":"opas-kaikki-koukuista-wordpressissae","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/opas-kaikki-koukuista-wordpressissae\/","title":{"rendered":"Opas: Kaikki koukuista WordPressiss\u00e4"},"content":{"rendered":"\n<p>Oletko koskaan sanonut, ett\u00e4 ratkaisu ongelmaasi on, ett\u00e4 sinun t\u00e4ytyy &quot;kiinnitt\u00e4\u00e4&quot; johonkin, jotta voit tehd\u00e4 asiasi tai k\u00e4ytt\u00e4\u00e4 <code>add_filter<\/code>ymm\u00e4rt\u00e4m\u00e4tt\u00e4, miksi se sotkee \u200b\u200basioita? Koukut muodostavat WordPressin perustan ja tarjoavat teemoja ja laajennuksia vuorovaikutukseen tai T\u00e4ss\u00e4 viestiss\u00e4 kerromme, mit\u00e4 koukut ovat, miten ne toimivat ja miten voimme k\u00e4ytt\u00e4\u00e4 niit\u00e4.<\/p>\n<h2>Mit\u00e4 ovat koukut?<\/h2>\n<p>Kun WordPress k\u00e4y koodinsa l\u00e4pi (aina luokkien lataamisen alusta, laajennusten lataamisesta, teeman lataamisesta, nykyisen pyynn\u00f6n kyselyn tekemisest\u00e4 ja lopuksi HTML:n hahmontamisesta), se kulkee joukon &quot;tarkistuspisteit\u00e4&quot; l\u00e4pi; koukut. Kun koukku havaitaan, WordPress lopettaa toimintansa \u2013 ja tarkistaa, onko t\u00e4ss\u00e4 koukussa suoritettavia toimintoja (teemassa, laajennuksessa tai itse WordPressiss\u00e4). Jos niit\u00e4 on, WordPress suorittaa kaikki n\u00e4m\u00e4 toiminnot ja jatkaa sitten siit\u00e4, mihin se j\u00e4i.<\/p>\n<p>T\u00e4m\u00e4 mahdollistaa sen, ett\u00e4 liit\u00e4nn\u00e4iset, teemat ja WordPress itse voivat &quot;kiinnitt\u00e4\u00e4&quot; tiettyihin kohtiin lis\u00e4t\u00e4kseen esim. tyylisivuja teeman <code>&lt;head&gt;<\/code>tunnisteeseen, muokatakseen WordPressin kyselyit\u00e4 viesteiss\u00e4 tai yksinkertaisesti muuttaa julkaisun sis\u00e4lt\u00f6\u00e4 niin halutessaan.<\/p>\n<p>Koukkuja on kahdenlaisia; toiminnot ja suodattimet. Ne toimivat melko samankaltaisesti toistensa kanssa, mutta yht\u00e4 poikkeusta lukuun ottamatta, jota tarkastellaan tarkemmin alla.<\/p>\n<h2>Toiminnot ja suodattimet<\/h2>\n<p>Liitty\u00e4ksesi toimintoon tai suodattimeen sinun on m\u00e4\u00e4ritett\u00e4v\u00e4, mit\u00e4 koukkua (sen nimen perusteella) haluat k\u00e4ytt\u00e4\u00e4, ja m\u00e4\u00e4ritett\u00e4v\u00e4 takaisinsoitto \u2013 joka on suoritettavan toiminnon nimi. Useimmissa tapauksissa koukut tarjoavat koukun kannalta oleellisia parametreja tai muuttujia.<\/p>\n<p>Toiminnot ovat yksinkertaisesti &quot;tarkistuspisteit\u00e4&quot; WordPressin toteutuksessa, joissa voit suorittaa teht\u00e4v\u00e4n tai toistaa jotain. Joissakin harvinaisissa tapauksissa voit muokata objektia (parametreissa), jotta kaikki seuraavat suoritukset toimivat muuttuneen objektin kanssa.<\/p>\n<p>Suodattimet on tarkoitettu muuttujan tai l\u00e4hd\u00f6n vaihtamiseen. Kaikki suodatinkoukut tarjoavat muuttujan, jota voit muuttaa ensimm\u00e4isen\u00e4 parametrina, ja voit muokata sit\u00e4 tai palauttaa jotain muuta.<\/p>\n<p>WordPress k\u00e4ytt\u00e4\u00e4 monia koukkuja, mutta voit luoda oman laajennuksessasi tai teemassasi. N\u00e4in kehitt\u00e4j\u00e4t voivat laajentaa ja muokata koodiasi. esimerkiksi muokkaamalla laajennusta teeman kautta tai muokkaamalla p\u00e4\u00e4teemaa alateeman kautta.<\/p>\n<p>Monet WordPressin toiminnot, joita tyypillisesti k\u00e4ytet\u00e4\u00e4n viestien tulostamiseen, ovat my\u00f6s suodattimia tai toimintoja. Esimerkiksi funktio <code>the_title()<\/code>tulostaa postauksen otsikon, mutta se on my\u00f6s suodatin.<\/p>\n<p>Katsotaanpa, miten kiinnit\u00e4mme n\u00e4m\u00e4 k\u00e4yt\u00e4nn\u00f6ss\u00e4.<\/p>\n<h2>Kiinni toimintaan<\/h2>\n<p>Toimintoon kiinnittymiseen k\u00e4ytet\u00e4\u00e4n menetelm\u00e4\u00e4 <code>add_action()<\/code>. Se vaatii v\u00e4hint\u00e4\u00e4n kaksi parametria; koukun nimi ja takaisinsoitto; sen toiminnon nimi, jonka haluat suorittaa. Vaihtoehtoisesti voit antaa prioriteetin kolmantena parametrina ja m\u00e4\u00e4ritt\u00e4\u00e4 takaisinsoittotoimintoon v\u00e4litett\u00e4vien argumenttien m\u00e4\u00e4r\u00e4n. Tarkastelemme kahta valinnaista parametria my\u00f6hemmin, mutta toistaiseksi t\u00e4ss\u00e4 on esimerkki <code>add_action<\/code>:<\/p>\n<pre><code>add_action('init', 'my_function_name');\nfunction my_function_name() {\n    \/\/ Do your stuff\n}<\/code><\/pre>\n<p>Ensimm\u00e4inen parametri <code>add_action<\/code>on toiminnon nimi; t\u00e4ss\u00e4 tapauksessa <code>init<\/code>, mik\u00e4 on melko yleinen WordPress-koukku, joka tapahtuu alustuksen aikana. Toinen parametri on takaisinsoittosi, t\u00e4ss\u00e4 tapauksessa sen funktion nimi, jonka haluamme suorittaa. Sitten sinun tarvitsee vain m\u00e4\u00e4ritt\u00e4\u00e4 funktio t\u00e4ll\u00e4 nimell\u00e4 ja lis\u00e4t\u00e4 koodisi sen sis\u00e4\u00e4n.<\/p>\n<p>Voit my\u00f6s k\u00e4ytt\u00e4\u00e4 anonyymej\u00e4 funktioita, joissa m\u00e4\u00e4rit\u00e4t funktion sis\u00e4ll\u00e4 <code>add_action<\/code>sen sijaan, ett\u00e4 antaisit funktion nimen, kuten niin;<\/p>\n<pre><code>add_action('init', function() {\n    \/\/ Do your stuff\n});<\/code><\/pre>\n<p>Monet kehitt\u00e4j\u00e4t pit\u00e4v\u00e4t t\u00e4t\u00e4 menetelm\u00e4\u00e4 parempana, koska se est\u00e4\u00e4 samannimisen PHP-funktion uudelleenm\u00e4\u00e4rittelyn.<\/p>\n<p>Jos sinun on suoritettava PHP-luokassa m\u00e4\u00e4ritetty funktio, sinun on annettava takaisinkutsuparametriksi taulukko; jossa ensimm\u00e4inen elementti on luokan objekti ja toinen elementti on funktion nimi:<\/p>\n<pre><code>class MyClass {\n    public function __construct() {\n        add_action('init', [$this, 'myFunctionName']);\n    }\n\u00a0\n    public function myFunctionName() {\n        \/\/ Do your stuff\n    }\n}<\/code><\/pre>\n<h2>Kiinnitys suodattimiin<\/h2>\n<p>Suodattimeen kiinnitt\u00e4mist\u00e4 varten k\u00e4yt\u00e4t toimintoa <code>add_filter()<\/code>. Kuten yll\u00e4, ensimm\u00e4inen parametri on suodattimen nimi ja toinen on takaisinsoittosi. Vaihtoehtoisesti voit antaa prioriteetin kolmanneksi parametriksi ja argumenttien m\u00e4\u00e4r\u00e4n nelj\u00e4nneksi. T\u00e4ss\u00e4 on esimerkki <code>add_filter<\/code>:<\/p>\n<pre><code>add_filter('the_title', 'my_function_name');\nfunction my_function_name($title) {\n    \/\/ Do your stuff\n    return $title;\n}<\/code><\/pre>\n<p>Yll\u00e4 olevassa esimerkiss\u00e4 kiinnit\u00e4mme suodattimen <code>the_title<\/code>(joka tulostaa viestin otsikon) ja k\u00e4skemme WordPressi\u00e4 suorittamaan toimintomme. Kaikki suodattimet tarjoavat aina yhden argumentin; muutettava muuttuja. Toiminnossani nimesin sen <code>$title<\/code>, koska tied\u00e4n sen sis\u00e4lt\u00e4v\u00e4n viestin otsikon. Funktion sis\u00e4ll\u00e4 voin muokata sit\u00e4 tai ohittaa muuttujan kokonaan. On t\u00e4rke\u00e4\u00e4 muistaa, ett\u00e4 suodattimissa on <strong>aina palautettava muuttuja<\/strong>. Jos et palauta jotain takaisinsoittofunktiossasi, muuttuja tyhjenee. Jos ohitin paluulausekkeen yll\u00e4 olevassa esimerkiss\u00e4, mik\u00e4\u00e4n viestien otsikko ei kaikuisi miss\u00e4\u00e4n.<\/p>\n<p>Muuttuja-argumentti ja s\u00e4\u00e4nt\u00f6 palauttaa jotain takaisinsoittofunktiossa on k\u00e4yt\u00e4nn\u00f6ss\u00e4 ainoa ero suodattimien ja toimien v\u00e4lill\u00e4. Kaikki muu toimii samalla tavalla. Voit seurata yll\u00e4 olevia esimerkkej\u00e4 anonyymeist\u00e4 funktioista ja luokista suodattimien toimien osalta sek\u00e4 valinnaisia \u200b\u200bparametreja, prioriteettia ja argumenttien m\u00e4\u00e4r\u00e4\u00e4. jota katsomme seuraavaksi.<\/p>\n<h2>Prioriteetti<\/h2>\n<p>Kolmas (valinnainen) parametri <code>add_action<\/code>ja <code>add_filter<\/code>on kokonaisluku, joka m\u00e4\u00e4ritt\u00e4\u00e4 takaisinsoittotoiminnon prioriteetin. T\u00e4m\u00e4 on hy\u00f6dyllist\u00e4 tapauksissa, joissa toimintoja on useita (ei v\u00e4ltt\u00e4m\u00e4tt\u00e4 sinulta teemassasi tai laajennuksessasi, muista, ett\u00e4 WordPress itse k\u00e4ytt\u00e4\u00e4 omia koukkujaan), ja sinun on p\u00e4\u00e4tett\u00e4v\u00e4, mik\u00e4 niist\u00e4 suoritetaan ensin.<\/p>\n<p>Jos prioriteettia ei ole annettu, sen oletusarvo on 10. Mit\u00e4 pienempi prioriteetti on, sit\u00e4 aikaisemmin se suoritetaan, ja mit\u00e4 korkeampi prioriteetti, sit\u00e4 my\u00f6hemmin se suoritetaan. Et voi antaa negatiivista prioriteettia.<\/p>\n<p>Kuvittele useita takaisinsoittotoimintoja, jotka on rekister\u00f6ity osoitteeseen <code>init<\/code>. Jos useille takaisinkutsuille ei ole asetettu prioriteettia, WordPress suorittaa ne siin\u00e4 j\u00e4rjestyksess\u00e4, jossa ne l\u00f6ydettiin (esimerkiksi <code>functions.php<\/code>laajennuskoodissasi).<\/p>\n<pre><code>add_action('init', 'my_function_name');\nadd_action('init', 'my_second_function_name');\nadd_action('init', 'my_third_function_name', 12);\nadd_action('init', 'my_fourth_function_name', 1);<\/code><\/pre>\n<p>T\u00e4ss\u00e4 j\u00e4rjestyksess\u00e4 WordPress suorittaa yll\u00e4 olevat takaisinkutsut:<\/p>\n<ol>\n<li><code>my_fourth_function_name<\/code>(prioriteetti 1)<\/li>\n<li><code>my_function_name<\/code>(prioriteetti 10)<\/li>\n<li><code>my_second_function_name<\/code>(prioriteetti 10, mutta n\u00e4kyy my\u00f6hemmin koodissa)<\/li>\n<li><code>my_third_function_name<\/code>(prioriteetti 12)<\/li>\n<\/ol>\n<h2>Argumenttien m\u00e4\u00e4r\u00e4<\/h2>\n<p>Yleens\u00e4 koukut tarjoavat joitain lis\u00e4tietoja, jotka ovat olennaisia \u200b\u200bja hy\u00f6dyllisi\u00e4 takaisinsoittotoimintojen kannalta. Esimerkiksi toiminto <code>save_post<\/code>(suoritetaan aina, kun viesti\u00e4 p\u00e4ivitet\u00e4\u00e4n) tarjoaa kaksi mahdollista argumenttia; viestitunnus ja viestiobjekti. N\u00e4m\u00e4 ovat hy\u00f6dyllisi\u00e4 operaatioissa, joita joudut yleens\u00e4 suorittamaan t\u00e4ll\u00e4 koukalla (jos esimerkiksi haluat tallentaa postin metasis\u00e4ll\u00f6n, tarvitset viestitunnuksen).<\/p>\n<p>Jos toiminnolle tai suodattimelle ei annettu argumenttien m\u00e4\u00e4r\u00e4\u00e4, se on oletusarvo 1. T\u00e4st\u00e4 syyst\u00e4 sinun ei tarvitse m\u00e4\u00e4ritt\u00e4\u00e4 1: <code>add_filter<\/code>t\u00e4 p\u00e4\u00e4st\u00e4ksesi muuttujaan, johon suodatin on koukussa. Toiminnot eiv\u00e4t kuitenkaan voi v\u00e4litt\u00e4\u00e4 argumentteja, vaikka argumenttien m\u00e4\u00e4r\u00e4ksi on asetettu oletusarvo 1.<\/p>\n<p>Katsotaanpa esimerkki\u00e4 argumenttien m\u00e4\u00e4r\u00e4n m\u00e4\u00e4ritt\u00e4misest\u00e4 ja siit\u00e4, kuinka k\u00e4yt\u00e4mme niit\u00e4 takaisinsoittotoiminnossamme:<\/p>\n<pre><code>add_action('save_post', 'my_function_name', 10, 2);\nfunction my_function_name($post_id, $post) {\n    \/\/ Do your stuff\n}<\/code><\/pre>\n<p>Yll\u00e4 olevassa esimerkiss\u00e4 k\u00e4skemme WordPressi\u00e4 v\u00e4litt\u00e4m\u00e4\u00e4n kaksi argumenttia takaisinsoittotoimintoomme. Muista, ett\u00e4 meid\u00e4n on m\u00e4\u00e4ritett\u00e4v\u00e4 prioriteetti kolmanneksi parametriksi, joten yleens\u00e4 m\u00e4\u00e4rit\u00e4mme oletusarvon, joka on 10. Mit\u00e4 tulee takaisinsoittofunktiollemme, voimme nyt m\u00e4\u00e4ritt\u00e4\u00e4 samat numeroargumentit, joita pyysimme, yll\u00e4 olevassa esimerkiss\u00e4 oli 2.<\/p>\n<p>Jos olisimme asettanut yll\u00e4 olevassa esimerkiss\u00e4 argumenttien lukum\u00e4\u00e4r\u00e4ksi 1, vain ensimm\u00e4inen argumentti takaisinsoittofunktiossamme t\u00e4ytett\u00e4isiin. Toinen, <code>$post<\/code>, olisi m\u00e4\u00e4rittelem\u00e4t\u00f6n.<\/p>\n<h2>Ent\u00e4 jos tarvitsemme tietoja, joita ei ole v\u00e4litetty koukussa?<\/h2>\n<p>On t\u00e4ysin koukun luoneen kehitt\u00e4j\u00e4n teht\u00e4v\u00e4 m\u00e4\u00e4ritt\u00e4\u00e4, mitk\u00e4 argumentit voidaan v\u00e4litt\u00e4\u00e4. T\u00e4m\u00e4 tarkoittaa, ett\u00e4 et voi yksinkertaisesti pakottaa siihen, mit\u00e4 argumentteja haluat tai tarvitset omassa <code>add_action<\/code>tai <code>add_filter<\/code>. Onneksi useimmissa tapauksissa meill\u00e4 on vaihtoehtoja saada tarvitsemamme muuttujat. Jos kytket toimintoon tai suodattimeen, jossa tied\u00e4t, ett\u00e4 tietyt globaalit muuttujat tulisi m\u00e4\u00e4ritt\u00e4\u00e4, voit k\u00e4ytt\u00e4\u00e4 n\u00e4it\u00e4 globaaleja muuttujia takaisinsoittotoiminnollasi. Lis\u00e4ksi WordPressiss\u00e4 on <a href=\"https:\/\/codex.wordpress.org\/Conditional_Tags\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">koko joukko ehdollisia tageja<\/a>, joita voit k\u00e4ytt\u00e4\u00e4 koukussa olevissa funktioissasi (lukuun ottamatta hyvin varhaisia \u200b\u200bkoukkuja, jotka tapahtuvat ennen kuin WordPress m\u00e4\u00e4rittelee n\u00e4m\u00e4 ehdolliset tagit)<\/p>\n<p>Katsotaanpa esimerkki\u00e4 globaalien muuttujien k\u00e4ytt\u00e4misest\u00e4. Suodatin <code>the_title<\/code>tarjoaa post ID:n valinnaisena argumenttina, jota voimme k\u00e4ytt\u00e4\u00e4 m\u00e4\u00e4ritt\u00e4m\u00e4ll\u00e4 sen hyv\u00e4ksytt\u00e4v\u00e4ksi argumentiksi;<\/p>\n<pre><code>add_filter('the_title', 'my_function_name', 10, 2);\nfunction my_function_name($title, $post_id) {\n    if ($post_id == 1) {\n        return 'First post ever!';\n    }\n    return $title;\n}<\/code><\/pre>\n<p>Voimme kuitenkin saavuttaa saman tuloksen:<\/p>\n<pre><code>add_filter('the_title', 'my_function_name');\nfunction my_function_name($title) {\n    global $post;\n    if ($post-&gt;ID == 1) {\n        return 'First post ever!';\n    }\n    return $title;\n}<\/code><\/pre>\n<p>Jos tied\u00e4t, ett\u00e4 globaali muuttuja on m\u00e4\u00e4ritetty sen pisteen mukaan, jossa koukku suoritetaan, voit m\u00e4\u00e4ritt\u00e4\u00e4 ne maailmanlaajuisiksi takaisinsoittotoiminnossasi ja k\u00e4ytt\u00e4\u00e4 tietoja sielt\u00e4. Esimerkiksi m\u00e4\u00e4ritt\u00e4minen <code>global $wp_query<\/code>yll\u00e4 olevassa esimerkiss\u00e4 antaa sinulle my\u00f6s p\u00e4\u00e4syn koko wp_query-objektiin funktion takaisinkutsun sis\u00e4ll\u00e4.<\/p>\n<p><a href=\"https:\/\/codex.wordpress.org\/Conditional_Tags\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPressin ehdolliset tagit<\/a> ovat eritt\u00e4in hy\u00f6dyllisi\u00e4. Ellei olet koukussa koukkuun, joka ilmenee hyvin varhaisessa WordPressin toteutuksessa, ne ovat saatavilla. On olemassa ehdollisia tunnisteita, joilla voit tarkistaa, mill\u00e4 sivulla (mallissa) olet, oletko valikossa tai viestisilmukassa ja paljon muuta. Esimerkiksi kun muokkaat viestikysely\u00e4 koukun <code>pre_get_posts<\/code>avulla, on eritt\u00e4in hy\u00f6dyllist\u00e4 varmistaa, ett\u00e4 koodisi toimii vain tietyiss\u00e4 tapauksissa. Esimerkiksi;<\/p>\n<pre><code>add_action('pre_get_posts', 'my_function_name');\nfunction my_function_name($query) {\n    if (!is_admin()) {\n        \/\/ Do your stuff\n    }\n}<\/code><\/pre>\n<p>Koska koukku <code>pre_get_posts<\/code>toimii sek\u00e4 j\u00e4rjestelm\u00e4nvalvojassa ett\u00e4 k\u00e4ytt\u00f6liittym\u00e4ss\u00e4, voimme k\u00e4ytt\u00e4\u00e4 ehdollista tagia varmistaaksemme, ett\u00e4 koodimme vaikuttaa vain k\u00e4ytt\u00f6liittym\u00e4n kyselyyn.<\/p>\n<h2>Omien koukkujen luominen<\/h2>\n<p>Voit m\u00e4\u00e4ritt\u00e4\u00e4 omat toiminnot ja suodattimet. Jos olet teeman tai laajennuksen kehitt\u00e4j\u00e4, sinua kehotetaan tekem\u00e4\u00e4n niin, jotta muut voivat muokata koodiasi muuttamatta l\u00e4hdekoodia.<\/p>\n<p>Rekister\u00f6i toiminto -sovelluksella <code>do_action()<\/code>ja rekister\u00f6i suodatin -sovelluksella <code>apply_filters()<\/code>.<\/p>\n<p><code>do_action()<\/code>Vaatii v\u00e4hint\u00e4\u00e4n 1 parametrin ; koukun nimi. Muista, ett\u00e4 koukun nimen on oltava yksil\u00f6llinen (\u00e4l\u00e4 kutsu sit\u00e4 esim <code>init<\/code>. koska t\u00e4m\u00e4 on WordPress-ydinkoukku). Aseta se <code>do_action()<\/code>minne haluat koukun n\u00e4kyv\u00e4n. Voit esimerkiksi sijoittaa koukun teemasi sis\u00e4\u00e4n <code>header.php<\/code>heti rungon j\u00e4lkeen m\u00e4\u00e4ritt\u00e4\u00e4ksesi koukun, johon kehitt\u00e4j\u00e4t voivat tulostaa skriptej\u00e4 tai muuta sis\u00e4lt\u00f6\u00e4.<\/p>\n<pre><code>...\n&lt;body&gt;\n    &lt;?php do_action('mytheme_after_body'); ?&gt;<\/code><\/pre>\n<p>Voit lis\u00e4t\u00e4 niin monta parametria <code>do_action<\/code>kuin haluat koukun nimen j\u00e4lkeen. Yrit\u00e4 pit\u00e4\u00e4 mieless\u00e4, mit\u00e4 datakehitt\u00e4j\u00e4t tarvitsevat koukkuihisi, jotka eiv\u00e4t muuten ole helposti saatavilla.<\/p>\n<p><code>apply_filters()<\/code>Vaatii v\u00e4hint\u00e4\u00e4n 2 parametria ; koukun nimi ja muuttuja, johon rekister\u00f6it suodattimen. Teemasi voi esimerkiksi rekister\u00f6id\u00e4 suodattimen joidenkin HTML-luokkien ymp\u00e4rille, jotta kehitt\u00e4j\u00e4t voivat muokata tai lis\u00e4t\u00e4 n\u00e4it\u00e4:<\/p>\n<pre><code>&lt;section class=\"&lt;?php echo apply_filters('mytheme_section_classes', 'section default-class'); ?&gt;\"&gt;\n    ...\n&lt;\/section&gt;<\/code><\/pre>\n<p>Kuten toimintoihin, voit lis\u00e4t\u00e4 niin monta parametria <code>apply_filters<\/code>kuin haluat kahden pakollisen parametrin j\u00e4lkeen.<\/p>\n<h2>P\u00e4\u00e4telm\u00e4t ja hy\u00f6dyllisi\u00e4 resursseja<\/h2>\n<p>T\u00e4m\u00e4n avulla toivon, ett\u00e4 olet saavuttanut vankan k\u00e4sityksen siit\u00e4, kuinka WordPress k\u00e4ytt\u00e4\u00e4 suurinta osaa koodistaan, kuinka voit muokata koodia ja kuinka sin\u00e4 voit kehitt\u00e4j\u00e4n\u00e4 antaa muiden kehitt\u00e4jien tehd\u00e4 muutoksia koodiisi.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_action\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">add_action<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_filter\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">add_filter<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Conditional_Tags\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPressin ehdolliset tunnisteet<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/do_action\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">do_action<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/apply_filters\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">K\u00e4yt\u00e4_suodattimia<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>T\u00e4ss\u00e4 aloittelijoille tarkoitetussa oppaassa opimme, mit\u00e4 WordPress-koukut ja suodattimet ovat, miten ne toimivat ja miten niit\u00e4 k\u00e4ytet\u00e4\u00e4n.<\/p>\n","protected":false},"author":1,"featured_media":153117,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[927,895,719,719,895,1110,834,843,834,927,843,864,864],"tags":[1166],"class_list":["post-233500","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aiheita","category-koodi","category-kehittaejae","category-n-a","category-opas-aloittelijoille","category-opetusohjelmia","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/233500","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=233500"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/233500\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/153117"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=233500"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=233500"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=233500"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}