Viestin sisällön suodattaminen oikein (ja apply_filters)
Aina silloin tällöin, kun työskentelen olemassa olevan lähdekoodin parissa tai suoritan koodin tarkastusta, näen muiden muokkaavan postausobjektin tekstin sisältöä seuraavasti :
<?php
$post->post_content = $my_content;
Tässä vaiheessa jotkut putoavat ja sanovat heti, että teet sen väärin. Vihaan tätä lausetta (ja se on jopa täynnä WordPress-koodikantaa, mutta poikkean siitä).
On olemassa tapoja käyttää muita olemassa olevia WordPress API -toimintoja tietojen puhdistamiseen ennen kuin ne asetetaan yhtä suureksi kuin post_content- attribuutin arvo. Näiden toimintojen käyttäminen ei ole paras tapa tehdä se.
Sen sijaan meidän kaikkien pitäisi käyttää apply_filters -suodatinta. Ongelma? Jotkut eivät tiedä, jotkut eivät tiedä, miten se toimii, ja jotkut eivät osaa käyttää sitä. Tämä tarkoittaa, että ei ole selvää, miten viestien sisältö suodatetaan oikein.
WordPressin suodattama raakasisältö kirjoitetaan sitten tietokantaan.
Mutta niille, jotka saattavat kuulua johonkin yllä olevista luokista, tämä voi ehkä auttaa.
Viestin sisällön suodatus oikein
Tässä vaiheessa oletan, että tiedät WP_Postista, sen ominaisuuksista ja niiden muokkaamisesta erilaisten API-toimintojen avulla.
Ensisijainen ongelma, josta puhun, on varmistaa, että tietokantaan kirjoitettava sisältö on muotoiltu samalla tavalla kuin WordPress tekisi sen, jos sinun pitäisi kirjoittaa tai päivittää viestiä.
Ja tapa, jolla se tapahtuu, on seuraava (ja pääsemme pian yksityiskohtiin):
<?php
/**
* Assume $contents is an array of information we want to convert into content for a post.
*/
$new_content = '';
foreach ($contents as $line) {
if (false === strpos( $line, $name)) {
$new_content .= $line;
}
}
$post->post_content = apply_filters( 'the_content', $new_content );
Mutta kysymykset siitä, mitä tämä toiminto tekee, miten se toimii ja milloin sitä käytetään, ovat edelleen olemassa.
Mikä on apply_filters?
Toki voit lukea kaiken tästä kehittäjäresursseista, ja se antaa seuraavan määritelmän :
Kutsu suodatinkoukkuun lisätyt toiminnot.
Mutta se ei aina auta. Tarkoitan, että voimme lukea asiakirjat ja silti kävellä pois hämmentyneenä, eikö niin?
Ajattele asiaa näin:
- Suodatin on toiminto, joka hyväksyy syötteen prosessiin.
- Syöte käsitellään funktion määritelmän perusteella.
- Funktio palauttaa sitten käsitellyn arvon.
Se, mitä teet palautetulle arvolle, on sinun päätettävissäsi, mutta kun käytät suodatinta tai kutsut application_filters -komentoa tiedolle, sanot WordPressille: "Minulla on nämä tiedot, käytä tällä avaimella tunnistettua suodatinta ja anna tulos takaisin minulle."
Ei paha, eikö?
Kuinka se toimii?
Mutta yksi osa yllä olevasta johtaa kysymykseen. Mainitsen erityisesti, että "…ole hyvä ja käytä tällä avaimella tunnistettua suodatinta…" ja ajatus avaimesta voi olla hämmentävä erityisesti siksi, että suodatin tai toiminto tai yleisemmin sanottuna koukku voidaan tunnistaa niin sanotusta tagista tai avain.
Ne ovat synonyymejä. Joten kun näet tunnisteen tai avaimen koukun yhteydessä, käsittele niitä sellaisina.
Näin se toimii seuraavasti:
- Apply_filters-funktio hyväksyy kaksi argumenttia. Ensimmäinen on tunniste tai avain (riippuen siitä, miksi haluat sitä kutsua), joka liittyy suodattimeen (lue: toimintoon), jota haluat käyttää työn käsittelyyn, toinen on arvo, jota haluat käsitellä mainitussa funktiossa.
- Suodatin käynnistyy ja palauttaa tuloksen (tai muista määrittämämme funktion).
- Otamme sitten palautetun arvon ja käytämme sitä mihin tahansa omaisuuteen, jota haluamme.
Joten esimerkiksi todennäköisesti näet jotain tällaista jonkun muun koodikannassa (tai ehkä jopa omassasi):
<?php
$post->post_content = apply_filters( 'the_content', $my_content );
Ja nyt, kun sinulla on vähän kontekstia sen toimivuuteen, ymmärrät idean, eikö niin?
Kuinka käytämme sitä?
Tämä tuo viestin täyden ympyrän alkuperäiseen kysymykseen siitä, kuinka voimme käyttää apply_filters -toimintoa post_content-arvoon aina, kun meidän on lisättävä tai päivitettävä viesti.
Oletetaan siis, että sinulla on sisältö, jota haluat käyttää (tai liittää) viestin sisällön arvoon. Voit tehdä jotain näin :
<?php
/**
* Assume $contents is an array of information we want to convert into content for a post.
*/
$new_content = '';
foreach ($contents as $line) {
if (false === strpos( $line, $name)) {
$new_content .= $line;
}
}
$post->post_content = $new_content;
Mutta se on huono muoto. Sen sijaan teet näin :
<?php
/**
* Assume $contents is an array of information we want to convert into content for a post.
*/
$new_content = '';
foreach ($contents as $line) {
if (false === strpos( $line, $name)) {
$new_content .= $line;
}
}
$post->post_content = apply_filters( 'the_content', $new_content );
Ja näin WordPress tekee sen.
Johtopäätös
Joten ottaen huomioon kaikki yllä olevat tiedot ja koodi, sinun tulee olla hyvin varusteltu varmistaaksesi, että suodatat tietokantaan lisättävät tiedot oikein, vaan sinulla on tarvittavat tiedot suodattimiesi määrittämiseen ja niiden käyttämiseen kaikki sopivaksi katsomasi tiedot.
Mutta esimerkkejä siitä on sisältöä toiseen viestiin.
Sillä välin, jos työskentelet viestisisällön kanssa, varmista, että suodatat tiedot oikein ennen kuin pudotat ne tietokantaan.