{"id":228740,"date":"2022-11-01T14:14:00","date_gmt":"2022-11-01T11:14:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228740"},"modified":"2022-11-09T04:06:07","modified_gmt":"2022-11-09T01:06:07","slug":"korrekt-filtrering-av-inlaeggsinnehaall-och-foerstaaelse-av-application_filters","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/korrekt-filtrering-av-inlaeggsinnehaall-och-foerstaaelse-av-application_filters\/","title":{"rendered":"Korrekt filtrering av inl\u00e4ggsinneh\u00e5ll (och f\u00f6rst\u00e5else av application_filters)"},"content":{"rendered":"\n<p>D\u00e5 och d\u00e5, n\u00e4r jag arbetar med redan existerande k\u00e4llkod eller utf\u00f6r en kodgranskning, kommer jag att se andra \u00e4ndra inl\u00e4ggsinneh\u00e5llet i ett inl\u00e4ggsobjekt <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a14b284a07d515fe2b08c62ec48ff8fd#file-00-my_content-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e5 h\u00e4r<\/a> :<\/p>\n<pre><code>&lt;?php\n\n$post-&gt;post_content = $my_content;\n<\/code><\/pre>\n<p>Vid det h\u00e4r laget kommer n\u00e5gra att komma in och omedelbart s\u00e4ga att du g\u00f6r fel. Jag hatar den frasen (och den finns till och med \u00f6verstr\u00f6dd i WordPress-kodbasen, men jag avviker).<\/p>\n<p>Det finns s\u00e4tt att anv\u00e4nda andra befintliga WordPress API-funktioner f\u00f6r att rensa data innan du st\u00e4ller in den lika med v\u00e4rdet p\u00e5 <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Post\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">post_content-<\/a> attributet, att anv\u00e4nda dessa funktioner \u00e4r inte det b\u00e4sta s\u00e4ttet att g\u00f6ra det.<\/p>\n<p>Ist\u00e4llet borde vi alla anv\u00e4nda application_filters. Problemet? Vissa vet inte, andra vet inte hur det fungerar och andra vet inte hur man anv\u00e4nder det. Det \u00e4r inte klart hur man ska g\u00e5 tillv\u00e4ga f\u00f6r att filtrera inl\u00e4ggsinneh\u00e5ll p\u00e5 r\u00e4tt s\u00e4tt.<\/p>\n<p>R\u00e5inneh\u00e5ll som filtrerats av WordPress och sedan skrivits till databasen.<\/p>\n<p>Men f\u00f6r dem som kan falla inom n\u00e5gon av kategorierna ovan, s\u00e5 kanske detta kan hj\u00e4lpa.<\/p>\n<h2>Korrekt filtrering av inl\u00e4ggsinneh\u00e5ll<\/h2>\n<p>Vid det h\u00e4r laget antar jag att du k\u00e4nner till <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_post\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Post<\/a>, dess egenskaper och hur man \u00e4ndrar dem genom olika API-funktioner.<\/p>\n<p>Den prim\u00e4ra fr\u00e5gan jag pratar om \u00e4r att se till att inneh\u00e5llet som kommer att skrivas till databasen \u00e4r formaterat p\u00e5 samma s\u00e4tt som WordPress skulle g\u00f6ra det om du skulle skriva eller uppdatera ett inl\u00e4gg.<\/p>\n<p>Och s\u00e4ttet som h\u00e4nder <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a14b284a07d515fe2b08c62ec48ff8fd#file-03-apply-filters-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e4r s\u00e5 h\u00e4r<\/a> (och vi kommer snart till detaljerna om detta):<\/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>Men fr\u00e5gorna om vad den h\u00e4r funktionen g\u00f6r, hur den fungerar och n\u00e4r den ska anv\u00e4ndas kvarst\u00e5r.<\/p>\n<h3>Vad \u00e4r application_filters?<\/h3>\n<p>Visst, du kan l\u00e4sa allt om detta i utvecklarresurserna, och det ger <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/apply_filters\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">denna definition<\/a> :<\/p>\n<blockquote>\n<p>Anropa funktionerna som l\u00e4ggs till en filterkrok.<\/p>\n<\/blockquote>\n<p>Men det hj\u00e4lper inte alltid. Jag menar att vi kan l\u00e4sa dokumentationen och \u00e4nd\u00e5 g\u00e5 d\u00e4rifr\u00e5n f\u00f6rvirrade, eller hur?<\/p>\n<p>T\u00e4nk p\u00e5 det s\u00e5 h\u00e4r:<\/p>\n<ol>\n<li>Ett filter \u00e4r en funktion som accepterar input till process.<\/li>\n<li>Inmatningen bearbetas utifr\u00e5n definitionen av funktionen.<\/li>\n<li>Funktionen returnerar sedan det bearbetade v\u00e4rdet.<\/li>\n<\/ol>\n<p>Vad du g\u00f6r med det returnerade v\u00e4rdet \u00e4r upp till dig, men n\u00e4r du anv\u00e4nder ett filter eller anropar <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/apply_filters\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">application_filters<\/a> p\u00e5 en informationsbit s\u00e4ger du till WordPress: &quot;Jag har den h\u00e4r informationen, anv\u00e4nd filtret som identifieras med denna nyckel och l\u00e4mna resultat tillbaka till mig.&quot;<\/p>\n<p>Inte illa, eller hur?<\/p>\n<h3>Hur fungerar det?<\/h3>\n<p>Men det finns en del av ovanst\u00e5ende som leder till en fr\u00e5ga. Specifikt n\u00e4mner jag att &quot;&#8230;sn\u00e4lla anv\u00e4nd filtret som identifieras av den h\u00e4r nyckeln&#8230;&quot; och id\u00e9n med en nyckel kan vara f\u00f6rvirrande, s\u00e4rskilt eftersom ett filter eller en \u00e5tg\u00e4rd eller, mer allm\u00e4nt sett, en krok kan identifieras av vad som kallas en tagg eller en nyckel.<\/p>\n<p>De \u00e4r synonymer. S\u00e5 n\u00e4r du ser <strong>tagg<\/strong> eller <strong>nyckel<\/strong> i samband med en krok, behandla dem som s\u00e5dana.<\/p>\n<p>Med det sagt, s\u00e5 h\u00e4r fungerar det:<\/p>\n<ol>\n<li>Funktionen applicera_filter accepterar tv\u00e5 argument. Den f\u00f6rsta \u00e4r taggen eller nyckeln (beroende p\u00e5 vad du vill kalla den) som \u00e4r kopplad till filtret (l\u00e4s: funktion) du vill anv\u00e4nda f\u00f6r att bearbeta arbetet, den andra \u00e4r v\u00e4rdet du vill bearbeta inom n\u00e4mnda funktion.<\/li>\n<li>Filtret kommer att aktiveras och returnera ett resultat (eller, kom ih\u00e5g, funktionen som vi har definierat).<\/li>\n<li>Vi tar sedan v\u00e4rdet som returneras och till\u00e4mpar det p\u00e5 vilken egendom vi vill.<\/li>\n<\/ol>\n<p>S\u00e5, till exempel, kommer du sannolikt att se n\u00e5got <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a14b284a07d515fe2b08c62ec48ff8fd#file-01-apply-filters-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">liknande detta<\/a> i n\u00e5gon annans kodbas (eller kanske till och med din egen):<\/p>\n<pre><code>&lt;?php\n\n$post-&gt;post_content = apply_filters( 'the_content', $my_content );\n<\/code><\/pre>\n<p>Och nu n\u00e4r du har lite sammanhang f\u00f6r hur det fungerar, f\u00f6rst\u00e5r du id\u00e9n, eller hur?<\/p>\n<h3>Hur anv\u00e4nder vi det?<\/h3>\n<p>Detta f\u00f6r inl\u00e4gget full cirkel till den f\u00f6rsta fr\u00e5gan om hur vi kan anv\u00e4nda application_filters till post_content n\u00e4rhelst vi beh\u00f6ver infoga eller uppdatera ett inl\u00e4gg.<\/p>\n<p>S\u00e5 l\u00e5t oss s\u00e4ga att du har inneh\u00e5llet som du vill till\u00e4mpa (eller l\u00e4gga till) p\u00e5 v\u00e4rdet av ett inl\u00e4ggs inneh\u00e5ll. Du kan g\u00f6ra n\u00e5got <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a14b284a07d515fe2b08c62ec48ff8fd#file-02-dont-apply-filters-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e5 h\u00e4r<\/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>Men det \u00e4r d\u00e5lig form. Ist\u00e4llet <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a14b284a07d515fe2b08c62ec48ff8fd#file-03-apply-filters-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">g\u00f6r du s\u00e5 h\u00e4r<\/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>Och det \u00e4r s\u00e5 WordPress g\u00f6r det.<\/p>\n<h2>Slutsats<\/h2>\n<p>S\u00e5 med tanke p\u00e5 all information och kod ovan b\u00f6r du vara v\u00e4l rustad inte bara f\u00f6r att se till att du filtrerar data som kommer att infogas i databasen korrekt, du har den kunskap som beh\u00f6vs f\u00f6r att definiera dina filter och till\u00e4mpa dem p\u00e5 alla data du tycker \u00e4r l\u00e4mpliga.<\/p>\n<p>Men exempel p\u00e5 det \u00e4r inneh\u00e5ll f\u00f6r ett annat inl\u00e4gg.<\/p>\n<p>Under tiden, om du arbetar med inl\u00e4ggsinneh\u00e5ll, se till att du filtrerar data ordentligt innan du sl\u00e4pper den i databasen.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Om du programm\u00e4ssigt infogar eller uppdaterar inl\u00e4gg \u00e4r det viktigt att se till att du filtrerar inl\u00e4ggets inneh\u00e5ll korrekt.<\/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":[901,807,818,724,868],"tags":[1173],"class_list":["post-228740","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-koda","category-php-9","category-plugins-3","category-utvecklaren","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228740","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=228740"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228740\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/221177"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=228740"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=228740"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=228740"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}