{"id":228440,"date":"2022-10-23T09:34:00","date_gmt":"2022-10-23T06:34:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228440"},"modified":"2022-11-09T02:26:46","modified_gmt":"2022-11-08T23:26:46","slug":"opcje-tymczasowe-w-wordpress-nasza-najlepsza-opcja","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/opcje-tymczasowe-w-wordpress-nasza-najlepsza-opcja\/","title":{"rendered":"Opcje tymczasowe w WordPress: nasza najlepsza opcja?"},"content":{"rendered":"\n<p>Je\u015bli chodzi o programowanie, idea warto\u015bci tymczasowych lub zmiennych tymczasowych lub jakikolwiek spos\u00f3b tymczasowego przechowywania danych w pami\u0119ci nie jest niczym nowym.<\/p>\n<p>Ale pracuj\u0105c z WordPressem \u2013 kt\u00f3ry jest bezpa\u0144stwowy \u2013 nie zawsze mamy ten luksus. Oznacza to, \u017ce nie jest to po prostu kwestia, powiedzmy, wrzucenia czego\u015b do bie\u017c\u0105cej <a href=\"https:\/\/php.net\/manual\/en\/features.sessions.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sesji<\/a>, przeczytania tego, a nast\u0119pnie usuni\u0119cia go, gdy sko\u0144czymy.<\/p>\n<p>I w\u0142a\u015bnie wtedy coraz wi\u0119cej zastanawia\u0142em si\u0119 nad pomys\u0142em tymczasowych opcji, oczywi\u015bcie z braku lepszego terminu. Oznacza to, \u017ce za ka\u017cdym razem, gdy potrzebuj\u0119 przechowywa\u0107 warto\u015b\u0107 z pojedynczego za\u0142adowania strony lub \u017c\u0105dania, aby odczyta\u0107 w innym za\u0142adowaniu strony lub innym \u017c\u0105daniu, tymczasowo wrzuc\u0119 warto\u015b\u0107 do <a href=\"https:\/\/codex.wordpress.org\/Database_Description#Table:_wp_options\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tabeli opcji<\/a>.<\/p>\n<p>Opcje tymczasowe: \u0107wiczenie i reprezentacja poprzez szkicowanie szcz\u0105tkowe<\/p>\n<p>Czy to niechlujne? Mo\u017ce. Czy mamy wiele innych mo\u017cliwo\u015bci? Zale\u017cy to od tego, z jakiej nowoczesnej technologii przegl\u0105darki chcemy korzysta\u0107. Nie o to jednak chodzi w tym po\u015bcie.<\/p>\n<p>Chodzi o to, \u017ce ze wzgl\u0119du na spos\u00f3b, w jaki dzia\u0142a WordPress, zastanawiam si\u0119, czy nasz\u0105 obecn\u0105, najlepsz\u0105 strategi\u0105 utrzymywania warto\u015bci tymczasowych, kt\u00f3ra jest najszerzej obs\u0142ugiwana we wszystkich instalacjach, jest tymczasowe dodanie warto\u015bci do tabeli opcji, odczytanie jej, a nast\u0119pnie usuni\u0119cie jej, gdy jest ju\u017c dost\u0119pna. zosta\u0142 pobrany?<\/p>\n<h2>Nasze opcje opcji tymczasowych<\/h2>\n<p>Osobi\u015bcie nie mam silnej opinii na temat tego, czy jest to co\u015b z\u0142ego, czy nie. Je\u015bli taki jest charakter tego, jak dzia\u0142a fundament, na kt\u00f3rym pracuj\u0119 nad rozwi\u0105zaniem, to p\u00f3jd\u0119 z tym.<\/p>\n<p>Po pierwsze, tak zazwyczaj robi\u0119 to w WordPressie:<\/p>\n<h3>1 Tworzenie tymczasowej opcji<\/h3>\n<p>Najpierw konfiguruj\u0119 funkcj\u0119, kt\u00f3ra jest pod\u0142\u0105czona do <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/update_option\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">update_option<\/a>. Pozwala to przyjrze\u0107 si\u0119 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/09c436b55f4c5eecc4187d7fc438ea40#file-00-init-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">aktualizowanej<\/a> opcji, jej starej i nowej warto\u015bci.<\/p>\n<pre><code>&lt;?php\n\npublic function init() {\n\n    add_action(\n        'update_option',\n        array( $this, 'manage_temporary_option' ),\n        10, 3\n    );\n}<\/code><\/pre>\n<p>W funkcji mog\u0119 zajrze\u0107 i zobaczy\u0107, czy konkretna opcja jest zapisywana. Je\u015bli nie, to mog\u0119 to po prostu zignorowa\u0107; w przeciwnym razie mog\u0119 na to spojrze\u0107 i rozpocz\u0105\u0107 prac\u0119 z <a href=\"https:\/\/gist.github.com\/tommcfarlin\/09c436b55f4c5eecc4187d7fc438ea40#file-01-manage-temporary-option-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">opcj\u0105 tymczasow\u0105<\/a>.<\/p>\n<pre><code>&lt;?php\n\npublic function manage_temporary_option( $option_name, $old_value, $new_value) {\n\n    if ('an_irrelevant_option' !== $option_name) {\n        return;\n    }\n\n    $url = 'page-from-which-we-expect-to-come.php';\n    if ($url === $_SERVER['REQUEST_URI']) {\n\n        update_option(\n            'our_temporary_option',\n            $new_value\n        );\n    }\n}\n<\/code><\/pre>\n<p>Ale co przynios\u0142aby opcja tymczasowa?<\/p>\n<h3>2 Opcja dla opcji tymczasowych<\/h3>\n<p>Za\u0142\u00f3\u017cmy, \u017ce masz opcj\u0119 we wtyczce, kt\u00f3ra jest w\u0142\u0105czona. By\u0107 mo\u017ce wymaga to od u\u017cytkownika wprowadzenia pewnych informacji przed przej\u015bciem przez reszt\u0119 procesu.<\/p>\n<p>Przyk\u0142ad: za\u0142\u00f3\u017cmy, \u017ce pracujesz nad obs\u0142ug\u0105 kasy i chcesz zmusi\u0107 u\u017cytkownik\u00f3w do utworzenia konta, ale istnieje opcja, kt\u00f3ra umo\u017cliwia klientom realizacj\u0119 transakcji bez tworzenia konta.<\/p>\n<p>Jedn\u0105 z implementacji, z kt\u00f3rej mogliby\u015bmy skorzysta\u0107, jest:<\/p>\n<ol>\n<li>Przed za\u0142adowaniem strony kasy sprawd\u017a, czy u\u017cytkownik mo\u017ce dokona\u0107 kasy jako go\u015b\u0107.<\/li>\n<li>Je\u015bli tak, zachowaj oryginaln\u0105 warto\u015b\u0107 opcji w opcji tymczasowej.<\/li>\n<li>Zmie\u0144 oryginaln\u0105 warto\u015b\u0107, aby wymaga\u0142a utworzenia konta.<\/li>\n<li>Po zako\u0144czeniu procesu kasowania skopiuj warto\u015b\u0107 z opcji tymczasowej do opcji oryginalnej.<\/li>\n<li>Usu\u0144 opcj\u0119 tymczasow\u0105.<\/li>\n<\/ol>\n<p>Jest to podobne do ca\u0142ego \u0107wiczenia w C, kiedy potrzebujesz wska\u017anika do <a href=\"http:\/\/www.c4learn.com\/c-programs\/interchanging-values-of-two-variables.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">zamiany dw\u00f3ch liczb<\/a> (dla ka\u017cdego, kto pami\u0119ta lub kto to zrobi\u0142).<\/p>\n<h2>Nasza najlepsza opcja?<\/h2>\n<p>Opisany powy\u017cej proces jest tylko przyk\u0142adem i nie ma by\u0107 ostatecznym sposobem na zachowanie tymczasowych warto\u015bci. Po drugie, przyk\u0142ad kasy nie ma na celu powi\u0105zania tego posta z eCommerce.<\/p>\n<p>Zamiast tego ma zapewni\u0107 konkretny przypadek u\u017cycia, kiedy przechowywanie tymczasowych opcji jest przydatne i jak mo\u017cemy to zrobi\u0107.<\/p>\n<p>Pozostaje wi\u0119c pierwotne pytanie: bior\u0105c pod uwag\u0119 spos\u00f3b dzia\u0142ania WordPressa, brak sesji i brak gwarancji niekt\u00f3rych funkcji przegl\u0105darki, takich jak localStorage, czy tymczasowe opcje w tabeli opcji s\u0105 naszym najlepszym rozwi\u0105zaniem?<\/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>Bior\u0105c pod uwag\u0119 spos\u00f3b dzia\u0142ania WordPressa, brak sesji i brak funkcji przegl\u0105darki, czy tymczasowe opcje w tabeli opcji s\u0105 naszym najlepszym rozwi\u0105zaniem?<\/p>\n","protected":false},"author":1,"featured_media":221144,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,919,897,752,845,866,815],"tags":[1169],"class_list":["post-228440","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-inny","category-kod","category-otwarte-zrodlo","category-samouczki","category-wordpress-7","category-wtyczki","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228440","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=228440"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228440\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/221144"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=228440"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=228440"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=228440"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}