{"id":228859,"date":"2022-11-01T14:15:00","date_gmt":"2022-11-01T11:15:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228859"},"modified":"2022-11-09T04:33:16","modified_gmt":"2022-11-09T01:33:16","slug":"postituse-sisu-oige-filtreerimine-ja-kohaldamisfiltrite-moistmine","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/postituse-sisu-oige-filtreerimine-ja-kohaldamisfiltrite-moistmine\/","title":{"rendered":"Postituse sisu \u00f5ige filtreerimine (ja kohaldamisfiltrite m\u00f5istmine)"},"content":{"rendered":"\n<p>Aeg-ajalt, kui t\u00f6\u00f6tan juba olemasoleva l\u00e4htekoodiga v\u00f5i teostan koodiauditit, n\u00e4en ma teisi muutmas postitusobjekti postituse sisu, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a14b284a07d515fe2b08c62ec48ff8fd#file-00-my_content-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">n\u00e4iteks j\u00e4rgmiselt<\/a> :<\/p>\n<pre><code>&lt;?php\n\n$post-&gt;post_content = $my_content;\n<\/code><\/pre>\n<p>Siinkohal langevad m\u00f5ned vahele ja \u00fctlevad kohe, et teete seda valesti. Ma vihkan seda fraasi (ja seda on isegi WordPressi koodibaasis risustatud, kuid ma kaldun k\u00f5rvale).<\/p>\n<p><a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Post\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Andmete puhastamiseks enne atribuudi post_content<\/a> v\u00e4\u00e4rtusega v\u00f5rdsustamist on v\u00f5imalik kasutada muid olemasolevaid WordPress API funktsioone. Nende funktsioonide kasutamine pole selleks parim viis.<\/p>\n<p>Selle asemel peaksime k\u00f5ik kasutama filtreid apply_filters. Probleem? M\u00f5ned ei tea, m\u00f5ned ei tea, kuidas see t\u00f6\u00f6tab, ja m\u00f5ned ei tea, kuidas seda kasutada. See t\u00e4hendab, et pole selge, kuidas postituse sisu \u00f5igesti filtreerida.<\/p>\n<p>WordPressi filtreeritud t\u00f6\u00f6tlemata sisu, mis seej\u00e4rel andmebaasi kirjutatud.<\/p>\n<p>Kuid neile, kes v\u00f5ivad kuuluda m\u00f5nda \u00fclaltoodud kategooriasse, v\u00f5ib see aidata.<\/p>\n<h2>Postituse sisu \u00f5ige filtreerimine<\/h2>\n<p>Siinkohal eeldan, et teate <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_post\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Posti<\/a>, selle atribuutide ja nende muutmise kohta erinevate API funktsioonide kaudu.<\/p>\n<p>Peamine probleem, millest ma r\u00e4\u00e4gin, on tagada, et andmebaasi kirjutatav sisu oleks vormindatud samamoodi nagu WordPress teeks seda postitust kirjutades v\u00f5i v\u00e4rskendades.<\/p>\n<p>Ja viis, mis juhtub, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a14b284a07d515fe2b08c62ec48ff8fd#file-03-apply-filters-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">on j\u00e4rgmine<\/a> (ja me j\u00f5uame selle \u00fcksikasjade juurde varsti):<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Assume $contents is an array of information we want to convert into content for a post.\n *\/\n\n$new_content = '';\nforeach ($contents as $line) {\n\n    if (false === strpos( $line, $name)) {\n        $new_content .= $line;\n    }\n}\n\n$post-&gt;post_content = apply_filters( 'the_content', $new_content );\n<\/code><\/pre>\n<p>Kuid k\u00fcsimused, mida see funktsioon teeb, kuidas see t\u00f6\u00f6tab ja millal seda kasutada, j\u00e4\u00e4vad alles.<\/p>\n<h3>Mis on rakendus_filtrid?<\/h3>\n<p>Muidugi saate seda k\u00f5ike lugeda arendaja ressurssidest ja see annab <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/apply_filters\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">j\u00e4rgmise definitsiooni<\/a> :<\/p>\n<blockquote>\n<p>Helistage filtrikonksule lisatud funktsioonidele.<\/p>\n<\/blockquote>\n<p>Kuid see ei aita alati. Ma m\u00f5tlen, et saame dokumentatsiooni lugeda ja ikkagi segaduses minema k\u00f5ndida, eks?<\/p>\n<p>M\u00f5elge sellele j\u00e4rgmiselt:<\/p>\n<ol>\n<li>Filter on funktsioon, mis aktsepteerib t\u00f6\u00f6tlemiseks sisendit.<\/li>\n<li>Sisend t\u00f6\u00f6deldakse funktsiooni definitsiooni alusel.<\/li>\n<li>Seej\u00e4rel tagastab funktsioon t\u00f6\u00f6deldud v\u00e4\u00e4rtuse.<\/li>\n<\/ol>\n<p>See, mida te tagastatud v\u00e4\u00e4rtusega ette v\u00f5tate, on teie otsustada, kuid kui rakendate filtrit v\u00f5i helistate <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/apply_filters\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">teabejupile k\u00e4sule apply_filters<\/a>, \u00fctlete WordPressile: \u201eMul on see teave olemas, rakendage selle v\u00f5tmega tuvastatud filter ja andke tulemus mulle tagasi.&quot;<\/p>\n<p>Pole paha, eks?<\/p>\n<h3>Kuidas see t\u00f6\u00f6tab?<\/h3>\n<p>Kuid \u00fcks osa \u00fclaltoodust viib k\u00fcsimuseni. T\u00e4psemalt mainin, et &quot;&#8230;palun rakendage selle v\u00f5tmega tuvastatud filtrit&#8230;&quot; ja v\u00f5tme idee v\u00f5ib olla segadusttekitav, eriti kuna filtri v\u00f5i toimingu v\u00f5i \u00fcldisemalt \u00f6eldes konksu saab tuvastada nn m\u00e4rgendi v\u00f5i v\u00f5ti.<\/p>\n<p>Need on s\u00fcnon\u00fc\u00fcmid. Seega, kui n\u00e4ete\u00a0 konksu kontekstis <strong>m\u00e4rgendit<\/strong> v\u00f5i <strong>v\u00f5tit<\/strong>, k\u00e4sitlege neid sellisena.<\/p>\n<p>Seda \u00f6eldes toimib see j\u00e4rgmiselt.<\/p>\n<ol>\n<li>Funktsioon apply_filters aktsepteerib kahte argumenti. Esimene on silt v\u00f5i v\u00f5ti (olenevalt sellest, kuidas soovite seda nimetada), mis on seotud filtriga (loe: funktsiooniga), mida soovite t\u00f6\u00f6 t\u00f6\u00f6tlemiseks kasutada, teine \u200b\u200bon v\u00e4\u00e4rtus, mida soovite selle funktsiooni sees t\u00f6\u00f6delda.<\/li>\n<li>Filter k\u00e4ivitub ja tagastab tulemuse (v\u00f5i pidage meeles, meie m\u00e4\u00e4ratletud funktsiooni).<\/li>\n<li>Seej\u00e4rel v\u00f5tame tagastatud v\u00e4\u00e4rtuse ja rakendame seda mis tahes kinnisvarale, mida soovime.<\/li>\n<\/ol>\n<p>N\u00e4iteks n\u00e4ete t\u00f5en\u00e4oliselt midagi <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a14b284a07d515fe2b08c62ec48ff8fd#file-01-apply-filters-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sellist<\/a> kellegi teise (v\u00f5i v\u00f5ib-olla isegi enda) koodibaasis:<\/p>\n<pre><code>&lt;?php\n\n$post-&gt;post_content = apply_filters( 'the_content', $my_content );\n<\/code><\/pre>\n<p>Ja n\u00fc\u00fcd, kui teil on natuke konteksti selle toimimiseks, saate idee aru, eks?<\/p>\n<h3>Kuidas me seda kasutame?<\/h3>\n<p>See toob postituse t\u00e4isringi esialgse k\u00fcsimuseni, kuidas saame kasutada parameetrit apply_filters post_content jaoks, kui meil on vaja postitust sisestada v\u00f5i v\u00e4rskendada.<\/p>\n<p>Oletame, et teil on sisu, mida soovite postituse sisu v\u00e4\u00e4rtusele rakendada (v\u00f5i lisada). V\u00f5ite teha midagi <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a14b284a07d515fe2b08c62ec48ff8fd#file-02-dont-apply-filters-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sellist<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Assume $contents is an array of information we want to convert into content for a post.\n *\/\n\n$new_content = '';\nforeach ($contents as $line) {\n\n    if (false === strpos( $line, $name)) {\n        $new_content .= $line;\n    }\n}\n\n$post-&gt;post_content = $new_content;\n<\/code><\/pre>\n<p>Aga see on halb vorm. Selle asemel <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a14b284a07d515fe2b08c62ec48ff8fd#file-03-apply-filters-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">teete seda<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Assume $contents is an array of information we want to convert into content for a post.\n *\/\n\n$new_content = '';\nforeach ($contents as $line) {\n\n    if (false === strpos( $line, $name)) {\n        $new_content .= $line;\n    }\n}\n\n$post-&gt;post_content = apply_filters( 'the_content', $new_content );\n<\/code><\/pre>\n<p>Ja nii teeb WordPress seda.<\/p>\n<h2>J\u00e4reldus<\/h2>\n<p>Arvestades kogu \u00fclaltoodud teavet ja koodi, peaksite olema h\u00e4sti relvastatud mitte ainult selleks, et tagada andmebaasi sisestatavate andmete \u00f5ige filtreerimine, vaid ka teadmised, mida on vaja filtrite m\u00e4\u00e4ratlemiseks ja nende rakendamiseks. mis tahes teie arvates sobivaid andmeid.<\/p>\n<p>Kuid selle n\u00e4ited on m\u00f5ne teise postituse sisu.<\/p>\n<p>Vahepeal, kui t\u00f6\u00f6tate postituse sisuga, veenduge, et filtreeriksite andmed enne andmebaasi kandmist korralikult.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kui sisestate v\u00f5i v\u00e4rskendate postitusi programmiliselt, on oluline veenduda, et filtreerite postituse sisu \u00f5igesti.<\/p>\n","protected":false},"author":1,"featured_media":221177,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,894,802,812,863],"tags":[1165],"class_list":["post-228859","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-kood","category-php-4","category-pistikprogrammid","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/228859","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=228859"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/228859\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/221177"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=228859"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=228859"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=228859"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}