{"id":233423,"date":"2023-02-13T15:39:00","date_gmt":"2023-02-13T12:39:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233423"},"modified":"2022-11-10T23:36:50","modified_gmt":"2022-11-10T20:36:50","slug":"juhend-muutke-hindu-woocommerceis-koodi-jaergi","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/juhend-muutke-hindu-woocommerceis-koodi-jaergi\/","title":{"rendered":"Juhend: muutke hindu WooCommerce&#8217;is koodi j\u00e4rgi"},"content":{"rendered":"\n<p>See postitus on m\u00f5eldud teile, kes soovite lisada koodi, mis kohandab teie WordPressi <a href=\"https:\/\/woocommerce.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WooCommerce&#8217;i<\/a> veebipoe hindu. Saate kas hindu t\u00f5sta v\u00f5i allahinnata. Ja kuidas ja kust kohandused tulevad, s\u00f5ltub t\u00e4ielikult teie juhtumist. Teie veebipood v\u00f5ib t\u00f6\u00f6tada protsentuaalsete allahindlustega, mis on m\u00e4\u00e4ratud igale registreeritud kasutajale, kohandatud globaalse seadistusega WooCommerce&#8217;i seadetes, fikseeritud fikseeritud summaga v\u00f5i millegagi, mis on m\u00e4\u00e4ratud igale tootele v\u00f5i tootekategooriale.<\/p>\n<p>Olen p\u00fc\u00fcdnud muuta koodi v\u00f5imalikult \u00fcldiseks, et saaksite seda oma juhtumile kohandada. Minu puhul tulenevad hinnamuutused kasutaja metana lisatud allahindluse protsendist.<\/p>\n<p>Kood on v\u00e4rskendatud t\u00f6\u00f6tama WooCommerce 3.x ja uuemate versioonide jaoks. Ma ei saa garanteerida, et see t\u00f6\u00f6tab madalamate versioonide jaoks.<\/p>\n<h2>1 samm: m\u00e4\u00e4rake oma koodi jaoks koht<\/h2>\n<p>Esimene samm on lihtne; vajate koodi lisamise kohta. See s\u00f5ltub t\u00e4ielikult teist. Saate selle lisada otse oma teemasse <code>functions.php<\/code>v\u00f5i kuhugi pistikprogrammi failidesse. Mulle meeldib t\u00f6\u00f6tada klassidega, mis hoiavad k\u00f5ik kenasti \u00fches kohas koos. Lihtsuse huvides panen klassi <code>\/src\/<\/code>oma teemasse alamkataloogi ning lisan ja eksemplareerin selle <code>functions.php<\/code>.<\/p>\n<pre><code>&lt;?php\nclass ChangePrices {\n    public function __construct() {\n    }\n}<\/code><\/pre>\n<pre><code>require_once(get_stylesheet_directory().'\/src\/ChangePrices.php');\nnew ChangePrices();<\/code><\/pre>\n<p>Muutke seda sammu vastavalt oma juhtumile.<\/p>\n<h2>2 samm: otsustage, kuidas hinna korrigeerimine peaks toimima<\/h2>\n<p>See samm v\u00f5ib teie jaoks juba selge olla \u2013 siin peate teadma, kuidas ja kust hinda korrigeerida. L\u00f5pp-eesm\u00e4rk peaks olema arv, millega hinnad liita, lahutada, korrutada v\u00f5i jagada.<\/p>\n<p>Minu puhul on mul igal kasutajal meta, mis sisaldab allahindlusprotsenti; arv vahemikus 0 kuni 99. Saidi administraator saab m\u00e4\u00e4rata igale kasutajale allahindluse. Ma ei n\u00e4ita kasutaja metav\u00e4lja lisamise koodi, kuna see ei pruugi olla teie jaoks ja seda on lihtne teha nt <a href=\"https:\/\/www.advancedcustomfields.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Advanced Custom Fields<\/a> abil .<\/p>\n<p>Oma klassis hoian klassi muutujat, mis konstruktoris seatakse kordajaks. Olenevalt sellest, kas kasutaja on sisse logitud, v\u00f5tan kasutajalt salvestatud allahindluse ja koostan sellest kordaja. Vaikimisi peaks kordaja olema 1. Hind 1 = sama hind mis varem. Aga n\u00e4iteks 10% allahindluse korral oleks kordaja 0,9. Hind 0,9 = hind soodushinnaga 10%.<\/p>\n<pre><code>&lt;?php\nclass ChangePrices {\n    private $user_discount_multiplier;\n\u00a0\n    public function __construct() {\n        $this-&gt;user_discount_multiplier = $this-&gt;getUserDiscount();\n    }\n\u00a0\n    public function getUserDiscount() {\n        if ((is_admin() &amp;&amp; !defined('DOING_AJAX')) || (!is_user_logged_in())) {\n            return 1;\n        }\n\u00a0\n        $user = wp_get_current_user();\n        $discount = (int)get_user_meta($user-&gt;ID, 'webshop_discount_percentage', true);\n\u00a0\n        return ($discount &lt; 1 || $discount &gt; 99)? 1: abs(($discount\/100)-1);\n    }\n}<\/code><\/pre>\n<p>N\u00fc\u00fcd, kui mul on kasutusvalmis kordaja, on aeg uurida WooCommerce&#8217;i hindade tegelikku kohandamist.<\/p>\n<h2>3 samm: hinnafiltrid WooCommerce&#8217;is<\/h2>\n<p>WooCommerce&#8217;is on \u00fcks filter lihtsate, r\u00fchmitatud ja v\u00e4liste tootet\u00fc\u00fcpide jaoks ning teine \u200b\u200bmuutuvate tootet\u00fc\u00fcpide jaoks. Soovitan lisada m\u00f5lemad filtrid, et katta k\u00f5ik tootet\u00fc\u00fcbid. Lisaks sellele t\u00f6\u00f6tab WooCommerce kolme t\u00e4iendava hinnafiltriga:<\/p>\n<ul>\n<li>Tavahinnad (<code>woocommerce_product_get_regular_price<\/code>ja <code>woocommerce_product_variation_get_regular_price<\/code>)<\/li>\n<li>M\u00fc\u00fcgihinnad (<code>woocommerce_product_get_sale_price<\/code>ja <code>woocommerce_product_variation_get_sale_price<\/code>)<\/li>\n<li>Praegune aktiivne hind (<code>woocommerce_product_get_price<\/code>ja <code>woocommerce_product_variation_get_price<\/code>). Praegune aktiivne hind v\u00f5etakse kas tavahinnast v\u00f5i m\u00fc\u00fcgihinnast.<\/li>\n<\/ul>\n<p>N\u00fc\u00fcd saate lihtsalt filtreerida hetke aktiivse hinna ja helistada sellele p\u00e4evale, kuid see s\u00f5ltub sellest, kuidas soovite oma veebipoes hindade kuvamist k\u00e4sitleda. Pidage meeles, et vaikimisi m\u00fc\u00fcgil olevatel toodetel on l\u00e4bikriipsutatud vana hind (tavahind) ja selle k\u00f5rval m\u00fc\u00fcgihind (aktiivne hind). Kui filtreerite ainult <code>x_get_price<\/code>ja toode on m\u00fc\u00fcgil, kuvatakse vana hind allahindluseta.<\/p>\n<p>Seet\u00f5ttu valin filtreerimiseks nii aktiivse hetkehinna (<code>x_get_price<\/code>) kui ka tavahinna (<code>x_get_regular_price<\/code>), sest ma ei taha oma veebipoe kasutajaid segadusse ajada.<\/p>\n<h3>Hinnafiltri kirjutamine<\/h3>\n<p>K\u00f5ik neli filtrit viitavad samale funktsioonile. Funktsiooni sees korrutame pakutud hinna lihtsalt klassi muutujaga. Pidage meeles, et kui allahindlust ei m\u00e4\u00e4rata, on kordaja 1, mille tulemusel hind ei muutu.<\/p>\n<pre><code>&lt;?php\nclass ChangePrices {\n    private $user_discount_multiplier;\n\u00a0\n    public function __construct() {\n        $this-&gt;user_discount_multiplier = $this-&gt;getUserDiscount();\n\u00a0\n        add_filter('woocommerce_product_get_price', [$this, 'adjustPrice'], 99, 2);\n        add_filter('woocommerce_product_get_regular_price', [$this, 'adjustPrice'], 99, 2);\n        add_filter('woocommerce_product_variation_get_price', [$this, 'adjustPrice'], 99, 2);\n        add_filter('woocommerce_product_variation_get_regular_price', [$this, 'adjustPrice'], 99, 2);\n    }\n\u00a0\n    public function adjustPrice($price, $product) {\n        return $price * $this-&gt;user_discount_multiplier;\n    }\n\u00a0\n    public function getUserDiscount() {\n        ....<\/code><\/pre>\n<p>Pange t\u00e4hele, et k\u00f5ik filtrid pakuvad tooteobjekti teise parameetrina. Kui soovisite hindu vastavalt toodetele kohandada, saate selleks kohandada koodi.<\/p>\n<p>Kui vaatate oma veebipoodi allahindlusega kasutajana sisse logides, peaksite n\u00fc\u00fcd n\u00e4gema soodushindu! Siiski pole me veel p\u00e4ris valmis. WooCommerce tegi versioonis 2.4.7 (<a href=\"https:\/\/woocommerce.wordpress.com\/2015\/09\/14\/caching-and-dynamic-pricing-upcoming-changes-to-the-get_variation_prices-method\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">loe l\u00e4hemalt siit<\/a>) m\u00f5ned muudatused, mis m\u00f5jutavad muutuvate toodete d\u00fcnaamilist hinnakujundust.<\/p>\n<h3>Muutuvate tootehindade k\u00e4sitlemine<\/h3>\n<p>Muutuvate toodete d\u00fcnaamilise hinnakujunduse toimimiseks peaksite lisama \u00fclaltoodud blogipostituses mainitud filtrid; <code>woocommerce_variation_prices_price<\/code>(ja vastav tavahinnafilter <code>woocommerce_variation_prices_regular_price<\/code>) <strong>ja<\/strong> filter <code>woocommerce_get_variation_prices_hash<\/code>. R\u00e4sifilter haldab WooCommerce&#8217;i sisemist vahem\u00e4lu \u2013 ja me peame k\u00e4skima WooCommerce&#8217;il see korralikult kustutada, kui muudame hindu koodi j\u00e4rgi.<\/p>\n<p>Esimesed kaks hinnafiltrit j\u00e4rgivad sama protseduuri nagu <code>adjustPrice()<\/code>, kuid m\u00e4\u00e4ran neile erineva funktsiooni, kuna parameetrid on erinevad. Mis puudutab r\u00e4sifiltri funktsiooni, peame r\u00e4si massiivi lisama, et teha kindlaks, millal tuleks vahem\u00e4lu t\u00fchjendada. Kasutaja ID lisamine on hea m\u00f5te, kuna kordaja on iga kasutaja jaoks kordumatu.<\/p>\n<pre><code>&lt;?php\nclass ChangePrices {\n    private $user_discount_multiplier;\n\u00a0\n    public function __construct() {\n        $this-&gt;user_discount_multiplier = $this-&gt;getUserDiscount();\n\u00a0\n        add_filter('woocommerce_product_get_price', [$this, 'adjustPrice'], 99, 2);\n        add_filter('woocommerce_product_get_regular_price', [$this, 'adjustPrice'], 99, 2);\n        add_filter('woocommerce_product_variation_get_price', [$this, 'adjustPrice'], 99, 2);\n        add_filter('woocommerce_product_variation_get_regular_price', [$this, 'adjustPrice'], 99, 2);\n\u00a0\n        add_filter('woocommerce_variation_prices_price', [$this, 'adjustVariablePrice'], 99, 3);\n        add_filter('woocommerce_variation_prices_regular_price', [$this, 'adjustVariablePrice'], 99, 3);\n        add_filter('woocommerce_get_variation_prices_hash', [$this, 'variationPricesHash']);\n    }\n\u00a0\n    public function variationPricesHash($hash) {\n        $hash[] = get_current_user_id();\n        return $hash;\n    }\n    public function adjustVariablePrice($price, $variation, $product) {\n        return $price * $this-&gt;user_discount_multiplier;\n    }\n\u00a0\n    public function adjustPrice($price, $product) {\n        ...<\/code><\/pre>\n<p>L\u00f5puks peaks see olema!<\/p>\n<p>Pange t\u00e4hele, et teil on juurdep\u00e4\u00e4s kogu tooteobjektile k\u00f5igis filtrites (ka kahes viimases variandis). See on kasulik juhtudel, kui soovite kohandada hindu tooteteabe alusel; n\u00e4iteks teatud toodete allahindlusest v\u00e4ljaj\u00e4tmine v\u00f5i tootekategooriate alusel allahindluse rakendamine. Teil peaks olema \u00fcsna lihtne koodi kohandada oma juhtumi jaoks vajalikuks.<\/p>\n<h2>T\u00e4ielik l\u00f5plik kood<\/h2>\n<p>Nagu tavaliselt, loodan, et olete seda postitust samm-sammult j\u00e4rgides midagi \u00f5ppinud, kuid ma annan kogu klassi viitamiseks:<\/p>\n<pre><code>&lt;?php\nclass ChangePrices {\n\u00a0\n    var $user_discount_multiplier;\n\u00a0\n    public function __construct() {\n        $this-&gt;user_discount_multiplier = $this-&gt;getUserDiscount();\n\u00a0\n        add_filter('woocommerce_product_get_price', [$this, 'adjustPrice'], 99, 2);\n        add_filter('woocommerce_product_get_regular_price', [$this, 'adjustPrice'], 99, 2);\n        add_filter('woocommerce_product_variation_get_price', [$this, 'adjustPrice'], 99, 2);\n        add_filter('woocommerce_product_variation_get_regular_price', [$this, 'adjustPrice'], 99, 2);\n\u00a0\n        add_filter('woocommerce_variation_prices_price', [$this, 'adjustVariablePrice'], 99, 3);\n        add_filter('woocommerce_variation_prices_regular_price', [$this, 'adjustVariablePrice'], 99, 3);\n\u00a0\n        add_filter('woocommerce_get_variation_prices_hash', [$this, 'variationPricesHash']);\n    }\n\u00a0\n    public function variationPricesHash($hash) {\n        $hash[] = get_current_user_id();\n        return $hash;\n    }\n\u00a0\n    public function adjustVariablePrice($price, $variation, $product) {\n        return $price * $this-&gt;user_discount_multiplier;\n    }\n\u00a0\n    public function adjustPrice($price, $product) {\n        return $price * $this-&gt;user_discount_multiplier;\n    }\n\u00a0\n    public function getUserDiscount() {\n        if ((is_admin() &amp;&amp; !defined('DOING_AJAX')) || (!is_user_logged_in())) {\n            return 1;\n        }\n\u00a0\n        $user = wp_get_current_user();\n        $discount = (int)get_user_meta($user-&gt;ID, 'webshop_discount_percentage', true);\n\u00a0\n        return ($discount &lt; 1 || $discount &gt; 99)? 1: abs(($discount\/100)-1);\n    }\n}<\/code><\/pre>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>See \u00f5petus selgitab, kuidas kohandada hindu oma WordPress WooCommerce veebipoes koodi abil. N\u00e4iteks allahindlusprotsent v\u00f5i fikseeritud summa.<\/p>\n","protected":false},"author":1,"featured_media":223696,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[894,894,1110,842,812,812,842,853,853,863,863],"tags":[1165],"class_list":["post-233423","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kood","category-n-a","category-opetused","category-pistikprogrammid","category-woocommerce-4","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233423","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=233423"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233423\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/223696"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=233423"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=233423"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=233423"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}