{"id":230557,"date":"2022-12-14T13:58:00","date_gmt":"2022-12-14T10:58:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230557"},"modified":"2022-12-14T13:58:36","modified_gmt":"2022-12-14T10:58:36","slug":"funkcja-pomocnicza-dla-powiadomien-administracyjnych","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/funkcja-pomocnicza-dla-powiadomien-administracyjnych\/","title":{"rendered":"Funkcja pomocnicza dla powiadomie\u0144 administracyjnych"},"content":{"rendered":"\n<p>Je\u015bli zajmujesz si\u0119 tworzeniem wtyczek, a nawet motyw\u00f3w, i w\u0142\u0105czasz do swojej pracy praktyki zorientowane obiektowo, prawdopodobnie masz do czynienia z pewnego rodzaju serializacj\u0105. I jeden z aspekt\u00f3w serializacji, kt\u00f3ry wymaga pewnego rodzaju informacji zwrotnej dla u\u017cytkownika.<\/p>\n<p>Mo\u017ce to by\u0107 komunikat o sukcesie, komunikat o niepowodzeniu lub komunikat po prostu ostrzegaj\u0105cy u\u017cytkownika, \u017ce \u200b\u200bco\u015b posz\u0142o nie tak, a mo\u017ce co\u015b powinno zosta\u0107 zaktualizowane.<\/p>\n<p>Niezale\u017cnie od przypadku, WordPress zapewnia wszystkie potrzebne nam udogodnienia; jednak mo\u017cemy sobie to jeszcze u\u0142atwi\u0107, pisz\u0105c funkcj\u0119 pomocnicz\u0105 dla powiadomie\u0144 administratora. To te\u017c jest proste.<\/p>\n<h2>Powiadomienia administratora: funkcja pomocnicza<\/h2>\n<p>Je\u015bli chodzi o pisanie powiadomie\u0144 administratora, wa\u017cne jest, aby zapozna\u0107 si\u0119 z <strong><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/admin_notices\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">odpowiednim hakiem.<\/a><\/strong><\/p>\n<p>Stamt\u0105d musisz r\u00f3wnie\u017c zna\u0107 nast\u0119puj\u0105ce nazwy klas:<\/p>\n<ul>\n<li>uwaga-b\u0142\u0105d<\/li>\n<li>og\u0142oszenie-sukces<\/li>\n<li>uwaga-ostrze\u017cenie<\/li>\n<li>zawiadomienie-informacje<\/li>\n<\/ul>\n<p>Dzi\u0119ki temu mo\u017cliwe jest napisanie funkcji pomocniczej, kt\u00f3ra u\u017cywa powy\u017cszego hooka i <strong><a href=\"https:\/\/php.net\/manual\/en\/functions.anonymous.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">funkcji anonimowej<\/a><\/strong> (lub <strong><a href=\"https:\/\/php.net\/manual\/en\/class.closure.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">closure<\/a><\/strong> ), aby osi\u0105gn\u0105\u0107 dok\u0142adnie to, czego potrzebujesz. Ale najpierw zwr\u00f3\u0107 uwag\u0119 na nast\u0119puj\u0105ce:<\/p>\n<blockquote>\n<p>Funkcje anonimowe, zwane r\u00f3wnie\u017c domkni\u0119ciami, umo\u017cliwiaj\u0105 tworzenie funkcji, kt\u00f3re nie maj\u0105 okre\u015blonej nazwy. S\u0105 najbardziej przydatne jako warto\u015b\u0107 parametr\u00f3w <a href=\"https:\/\/php.net\/manual\/en\/language.pseudo-types.php#language.types.callback\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wywo\u0142a\u0144 zwrotnych<\/a>, ale maj\u0105 wiele innych zastosowa\u0144.<\/p>\n<\/blockquote>\n<p>Maj\u0105c to na uwadze, powiniene\u015b mie\u0107 wszystko, czego potrzebujesz, aby napisa\u0107 swojego pomocnika i mie\u0107 pomys\u0142, kiedy go opr\u00f3\u017cni\u0107.<\/p>\n<p>Po pierwsze, <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/a7b10e37c4128913e4069f2825a443cd#file-00-display-admin-notice-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">funkcja pomocnicza:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\n\/**\n * Provides an easy eay to display an administration notice based on the incoming\n * class and message.\n *\n * @param string $class   the class to add to the notice (warning, error, success)\n * @param string $message the message to display in the administration notice area\n *\/\nprotected function displayAdminNotice($class, $message)\n{\n    add_action(\n        'admin_notices',\n        function() use ($class, $message) {\n            printf(\n                '&lt;div class=\"%1$s\"&gt;&lt;p&gt;%2$s&lt;\/p&gt;&lt;\/div&gt;',\n                esc_attr($class),\n                esc_html($message)\n            );\n        }\n    );\n}<\/code><\/pre>\n<p>Nast\u0119pnie za\u0142\u00f3\u017cmy, \u017ce wysy\u0142ane \u017c\u0105danie zawiera nieprawid\u0142owe dane. Aby sobie z tym poradzi\u0107, u\u017cyj powy\u017cszego pomocnika <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/a7b10e37c4128913e4069f2825a443cd#file-01-admin-notice-error-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">, takiego jak:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nif (!$this-&gt;hasValidInput()) {\n    $this-&gt;displayAdminNotice(\n        'notice notice-error',\n        'You must specify a valid email address and license key.'\n    );\n}<\/code><\/pre>\n<p>Z drugiej strony powiedzmy, \u017ce <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/a7b10e37c4128913e4069f2825a443cd#file-02-admin-notice-success-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wszystko dzia\u0142a dobrze:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nif (update_option('acme-option', $values)) {\n    $this-&gt;displayAdminNotice(\n      'notice notice-success',\n      'The options were updated successfully!'\n  );\n}<\/code><\/pre>\n<p>Jak wida\u0107, funkcja ta korzysta z natywnych zaczep\u00f3w WordPress, udogodnie\u0144 PHP, a tak\u017ce tworzy metod\u0119, kt\u00f3ra mo\u017ce by\u0107 <strong><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/pisanie-testow-jednostkowych-za-pomoca-phpunit-czesc-1-konfiguracja\/\" title=\"testowana jednostkowo\">testowana jednostkowo<\/a><\/strong>, co ma znaczenie, je\u015bli zamierzasz pisa\u0107 testowalne <strong><a href=\"https:\/\/tommcfarlin.com\/web-application-foundation\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">aplikacje internetowe w WordPress.<\/a><\/strong><\/p>\n<p>A nawet je\u015bli nie, masz \u0142atwiejszy spos\u00f3b, aby kod by\u0142 nieco bardziej <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Don%27t_repeat_yourself\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">SUCHY<\/a><\/strong> ni\u017c wcze\u015bniej.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>WordPress zapewnia wszystkie potrzebne nam udogodnienia; jednak mo\u017cemy to u\u0142atwi\u0107, pisz\u0105c funkcj\u0119 pomocnicz\u0105 dla powiadomie\u0144 administratora. To te\u017c jest proste.<\/p>\n","protected":false},"author":1,"featured_media":236170,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,897,866],"tags":[1169],"class_list":["post-230557","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-kod","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230557","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=230557"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230557\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/236170"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=230557"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=230557"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=230557"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}