{"id":233997,"date":"2023-02-28T20:05:00","date_gmt":"2023-02-28T17:05:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233997"},"modified":"2022-11-11T13:43:10","modified_gmt":"2022-11-11T10:43:10","slug":"juhend-woocommercei-kassavaeljade-kohandamine-koodi-jaergi","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/juhend-woocommercei-kassavaeljade-kohandamine-koodi-jaergi\/","title":{"rendered":"Juhend: WooCommerce&#8217;i kassav\u00e4ljade kohandamine koodi j\u00e4rgi"},"content":{"rendered":"\n<p>Sellest postitusest saate teada, kuidas <a href=\"https:\/\/woocommerce.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WooCommerce&#8217;is<\/a> vaikimisi kassav\u00e4lju muuta, eemaldada v\u00f5i \u00fcmber paigutada ning kuidas lisada oma kohandatud v\u00e4lja.<\/p>\n<h2>Kassav\u00e4ljade filter<\/h2>\n<p>WooCommerce pakub filtrit k\u00f5ikide kassav\u00e4ljade jaoks: <code>woocommerce_checkout_fields<\/code>. Arveldus- ja tarnev\u00e4ljade jaoks on ka spetsiaalsed filtrid; <code>woocommerce_billing_fields<\/code>ja <code>woocommerce_shipping_fields<\/code>need m\u00f5lemad satuvad \u00fclalmainitud esimesse filtrisse.<\/p>\n<p>V\u00e4ljad <code>woocommerce_checkout_fields<\/code>on struktureeritud mitmem\u00f5\u00f5tmelises massiivis j\u00e4rgmiselt:<\/p>\n<ul>\n<li><code>billing<\/code>\n<ul>\n<li><code>billing_first_name<\/code><\/li>\n<li><code>billing_last_name<\/code><\/li>\n<li><code>billing_company<\/code><\/li>\n<li><code>billing_address_1<\/code><\/li>\n<li><code>billing_address_2<\/code><\/li>\n<li><code>billing_city<\/code><\/li>\n<li><code>billing_postcode<\/code><\/li>\n<li><code>billing_country<\/code><\/li>\n<li><code>billing_state<\/code><\/li>\n<li><code>billing_email<\/code><\/li>\n<li><code>billing_phone<\/code><\/li>\n<\/ul>\n<\/li>\n<li><code>order<\/code>\n<ul>\n<li><code>order_comments<\/code><\/li>\n<\/ul>\n<\/li>\n<li><code>shipping<\/code>\n<ul>\n<li><code>shipping_first_name<\/code><\/li>\n<li><code>shipping_last_name<\/code><\/li>\n<li><code>shipping_company<\/code><\/li>\n<li><code>shipping_address_1<\/code><\/li>\n<li><code>shipping_address_2<\/code><\/li>\n<li><code>shipping_city<\/code><\/li>\n<li><code>shipping_postcode<\/code><\/li>\n<li><code>shipping_country<\/code><\/li>\n<li><code>shipping_state<\/code><\/li>\n<\/ul>\n<\/li>\n<li><code>account<\/code>\n<ul>\n<li><code>account_username<\/code><\/li>\n<li><code>account_password<\/code><\/li>\n<li><code>account_password-2<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Iga v\u00e4li on massiiv, mis sisaldab j\u00e4rgmisi s\u00e4tteid (k\u00f5ik v\u00e4ljad ei sisalda k\u00f5iki atribuute):<\/p>\n<ul>\n<li><code>label<\/code>: v\u00e4lja n\u00e4htav silt kassas<\/li>\n<li><code>placeholder<\/code>: sisendi kohat\u00e4ide<\/li>\n<li><code>type<\/code>: m\u00e4\u00e4rab v\u00e4lja t\u00fc\u00fcbi. Kui seda pole m\u00e4\u00e4ratud, on see vaikimisi tekstisisestus, muidu v\u00f5ib see olla <code>select<\/code>, <code>tel<\/code>, <code>email<\/code>, <code>textarea<\/code>jne.<\/li>\n<li><code>required<\/code>: t\u00f5ev\u00e4\u00e4rtus, olenemata sellest, kas v\u00e4li on kohustuslik v\u00f5i mitte<\/li>\n<li><code>class<\/code>: klassid, mida rakendatakse v\u00e4lja \u00fcmbriselemendile. Pidage meeles, et see on massiiv.<\/li>\n<li><code>priority<\/code>: t\u00e4isarv, mis teavitab WooCommerce&#8217;i v\u00e4lja tellimusest<\/li>\n<\/ul>\n<p>M\u00f5nel v\u00e4ljal on t\u00e4iendavad atribuudid, mis on teatud v\u00e4ljade jaoks ainulaadselt kohandatud ja mis tavaliselt ei pea m\u00f5tlema.<\/p>\n<h2>Vaikev\u00e4ljade muutmine<\/h2>\n<p>Lisades filtri <code>woocommerce_checkout_fields<\/code>ja vaadates \u00fclaltoodud \u00fclevaadet, peaks olema \u00fcsna lihtne m\u00f5ista, kuidas olemasolevaid v\u00e4lju muuta.<\/p>\n<p>Siin on n\u00e4ide telefoniv\u00e4ljal siltide muutmise kohta.<\/p>\n<pre><code>add_filter('woocommerce_checkout_fields', function($fields) {\n    $fields['billing']['billing_phone']['label'] = __('Mobile phone', 'textdomain');\n    return $fields;\n});<\/code><\/pre>\n<p>V\u00f5i \u00e4kki soovite muuta n\u00f5utavat atribuuti, muutes v\u00e4lja valikuliseks (v\u00f5i vastupidi)?<\/p>\n<pre><code>add_filter('woocommerce_checkout_fields', function($fields) {\n    $fields['billing']['billing_phone']['required'] = false;\n    return $fields;\n});<\/code><\/pre>\n<p>Kui aga soovid aadressiv\u00e4lju redigeerida (kehtib eelk\u00f5ige <code>_address_1<\/code>, <code>_postcode<\/code>ja <code>_city<\/code>) puhul, v\u00f5ib tekkida vajadus kasutada teistsugust filtrit; nimelt <code>woocommerce_default_address_fields<\/code>. Selle filtri argumendina pole massiivi enam struktureeritud arveldus- ja tarnev\u00f5tmetega ning v\u00e4ljav\u00f5tmetel puuduvad eesliitega &#8221; <code>billing_<\/code>&quot; v\u00f5i &#8221; <code>shipping_<\/code>&#8221; osad. Aadress 1 on n\u00e4iteks selles filtris v\u00f5tme all <code>address_1<\/code>.<\/p>\n<p>Siin on n\u00e4ide sihtnumbri sildi muutmisest:<\/p>\n<pre><code>add_filter('woocommerce_default_address_fields', function($address_fields) {\n    $address_fields['postcode']['label'] = __('Postcode', 'textdomain');\n    return $address_fields;\n});<\/code><\/pre>\n<h2>Vaikev\u00e4ljade eemaldamine<\/h2>\n<p>Vaikev\u00e4ljade eemaldamine on lihtne, kasutades filtris PHP <code>unset()<\/code>massiivi funktsiooni. <code>woocommerce_checkout_fields<\/code>N\u00e4iteks:<\/p>\n<pre><code>add_filter('woocommerce_checkout_fields', function($fields) {\n    unset($fields['billing']['billing_city']);\n    return $fields;\n});<\/code><\/pre>\n<h2>V\u00e4ljade \u00fcmberj\u00e4rjestamine<\/h2>\n<p>V\u00e4ljade \u00fcmberj\u00e4rjestamine toimub v\u00e4ljade atribuuti muutes <code>priority<\/code>. See atribuut lisati hiljuti (WooCommerce 3+) ja muutis j\u00e4rjestuse muutmise palju lihtsamaks kui varem, kui tuli massiivi \u00fcmber korraldada.<\/p>\n<p>Mida v\u00e4iksem number, seda k\u00f5rgemale see tuleb. Iga v\u00e4lja prioriteet annab teatud tegevusruumi v\u00e4ljade liigutamiseks nende vahel, n\u00e4iteks eesnimi algab 10-st, perekonnanimi 20-st ja ettev\u00f5te 30-st. Kui soovite v\u00e4lja perekonnanime j\u00e4rel ja ettev\u00f5tte ees, v\u00f5ite seada prioriteediks 25.<\/p>\n<p>N\u00e4ide telefoniv\u00e4lja teisaldamisest enne aadressi:<\/p>\n<pre><code>add_filter('woocommerce_checkout_fields', function($fields) {\n    $fields['billing']['billing_phone']['priority'] = 35;\n    return $fields;\n});<\/code><\/pre>\n<p>Siin kehtib sama aadressiv\u00e4ljade erijuhtum, nagu varem mainitud. Kui soovite muuta n\u00e4iteks linna prioriteeti, kasutage filtrit <code>woocommerce_default_address_fields<\/code>.<\/p>\n<pre><code>add_filter('woocommerce_default_address_fields', function($address_fields) {  \n    $address_fields['city']['priority'] = 45;\n    return $address_fields;\n});<\/code><\/pre>\n<p>M\u00e4rkus. WooCommerce alistab sageli s\u00f5ltuvalt riigist sihtnumbri v\u00e4lja prioriteedi (m\u00e4\u00e4rates selle v\u00e4\u00e4rtusele 65).<\/p>\n<h2>Kohandatud v\u00e4ljade lisamine kassasse<\/h2>\n<p>Kohandatud v\u00e4ljade lisamiseks on kaks v\u00f5imalust; saate filtri kaudu lisada kohandatud v\u00e4lja kas arveldus- v\u00f5i <code>woocommerce_checkout_fields<\/code>tarnemassiivile ning WooCommerce tegeleb k\u00f5igega selle t\u00f6\u00f6tlemise ja tellimusele salvestamise kohta. Teise v\u00f5imalusena v\u00f5ite v\u00e4lja lisamiseks kasutada kassas toiminguid (n\u00e4iteks <code>woocommerce_after_order_notes<\/code>), kuid sel juhul peate selle t\u00f6\u00f6tlemiseks ja k\u00e4sitsi salvestamiseks koodi kirjutama.<\/p>\n<h3>1 meetod: kohandatud v\u00e4lja lisamine arveldus- v\u00f5i kohaletoimetamisse kassafiltri abil<\/h3>\n<p>Lihtne meetod on kasutada sama filtrit, mida oleme kogu aeg kasutanud; <code>woocommerce_checkout_fields<\/code>ja lisage lihtsalt uus massiivi element.<\/p>\n<p><a href=\"https:\/\/docs.woocommerce.com\/document\/tutorial-customising-checkout-fields-using-actions-and-filters\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WooCommerce&#8217;i dokumentatsioon<\/a> seda <strong>selgelt ei selgita<\/strong>, kuid see meetod t\u00f6\u00f6tab ainult v\u00e4ljade lisamiseks v\u00e4ljadele &quot;arveldamine&quot; v\u00f5i &quot;saatmine&quot;. Samuti peab teie v\u00f5tme\/v\u00e4lja nime ees olema vastav vanemv\u00f5ti; n\u00e4iteks v\u00e4lja &#8216; <code>my_custom_input<\/code>&#8216; lisamiseks arveldusmassiivile tuleb sellele panna nimi &#8216; <code>billing_my_custom_input<\/code>&#8216;. Vastasel juhul ei salvesta WooCommerce teie v\u00e4lja.<\/p>\n<p>Siin on n\u00e4ide mittevajaliku kohandatud valiku\/rippmen\u00fc\u00fc lisamisest arveldamiseks, mis asub vahetult enne telefoninumbrit. M\u00e4\u00e4rates &#8216; <code>type<\/code>&#8216; v\u00e4\u00e4rtuseks <code>select<\/code>&#8216; ja pakkudes atribuudi &#8216; &#8216; valikute jaoks massiivi, <code>options<\/code>teete valitud sisendi.<\/p>\n<pre><code>add_filter('woocommerce_checkout_fields', function($fields) {\n    $fields['billing']['billing_my_custom_select'] = [\n        'label' =&gt; __('My custom select', 'textdomain'),\n        'required' =&gt; false,\n        'type' =&gt; 'select',\n        'options' =&gt; [\n            '' =&gt; __('Choose which you prefer', 'textdomain'),\n            'dogs' =&gt; __('Dogs are best', 'textdomain'),\n            'cats' =&gt; __('I prefer cats', 'textdomain')\n        ],\n        'class' =&gt; ['form-row-wide'],\n        'priority' =&gt; 85\n    ];\n    return $fields;\n});<\/code><\/pre>\n<p>WooCommerce t\u00f6\u00f6tleb ja salvestab selle v\u00e4lja automaatselt kassav\u00e4ljade osana.<\/p>\n<p>Tellimuse administraatoris pole automaatset v\u00f5imalust oma v\u00e4lja n\u00e4htavaks teha. Saate toimingu k\u00fclge haakida <code>woocommerce_admin_order_data_after_billing_address<\/code>ja k\u00e4sitsi hankida metav\u00e4lja, kasutades toimingu argumendina esitatud tellimuse objekti tellimuse ID-d. Pidage meeles, et v\u00e4\u00e4rtus salvestatakse post-meta, mille ees on &quot;_&quot;. \u00dclaltoodud n\u00e4ites salvestatakse v\u00e4li <code>_billing_my_custom_select<\/code>andmebaasi nimega &quot; &quot;.<\/p>\n<pre><code>add_action('woocommerce_admin_order_data_after_billing_address', function($order) {\n    $my_value = get_post_meta($order-&gt;id, '_billing_my_custom_select', true);\n    if (!empty($my_value)) {\n        echo '&lt;p&gt;&lt;strong&gt;'. __('My custom select', 'textdomain'). ':&lt;\/strong&gt; '. $my_value. '&lt;\/p&gt;';\n    }\n});<\/code><\/pre>\n<h3>2 meetod: kohandatud v\u00e4lja lisamine toimingute abil<\/h3>\n<p>Kui teil tekib \u00fclaltoodud meetodiga probleeme v\u00f5i soovite oma v\u00e4lja teistmoodi positsioneerida, soovitan seda meetodit kasutada. See on natuke rohkem koodi, kuid teil on suurem kontroll. Mina isiklikult eelistan seda meetodit.<\/p>\n<p>Esimene samm on valida kassas toiming, kuhu soovite oma v\u00e4lja lisada. See on lihtsalt eelistuse k\u00fcsimus, kus soovite oma v\u00e4lja kuvada. Heitke pilk <code>\/woocommerce\/templates\/checkout\/<\/code>mallifailidele; nt v\u00f5i. <code>form-checkout.php<\/code>_ Oma n\u00e4ites olen valinud toimingu, mis kuvatakse tellimuse m\u00e4rkuste j\u00e4rel.<code>form-billing.php``form-shipping.php``woocommerce_after_order_notes``form-shipping.php<\/code><\/p>\n<p>Kasutate funktsiooni woocommerce_form_field ja pakute samad omadused, mida n\u00e4gite <code>woocommerce_checkout_fields<\/code>filtris (vt \u00fclal). Soovi korral saate oma kohandatud v\u00e4ljale lisada HTML-i, nagu olen teinud. Siin on n\u00e4ide kohandatud v\u00e4lja lisamisest liikme ID sisestamiseks:<\/p>\n<pre><code>add_action('woocommerce_after_order_notes', function($checkout) {\n    echo '&lt;div id=\"my_custom_checkout_field\"&gt;&lt;h3&gt;'. __('Members', 'textdomain'). '&lt;\/h3&gt;';\n\u00a0\n    woocommerce_form_field('member_id', [\n        'type' =&gt; 'text',\n        'class' =&gt; ['form-row-wide'],\n        'label' =&gt; __('Member ID', 'textdomain'),\n    ], $checkout-&gt;get_value('member_id'));\n\u00a0\n    echo '&lt;\/div&gt;';\n});<\/code><\/pre>\n<p>V\u00e4li peaks n\u00fc\u00fcd kassasse ilmuma.<\/p>\n<p>Teie v\u00e4lja kinnitamine on valikuline. Lisasin valideerimise n\u00e4ite, et tagada kehtiv liikme ID esitamine, kontrollides selle pikkust. Kasutage kinnitamiseks konksu <code>woocommerce_checkout_process<\/code>ja kui teil on vaja t\u00f5rketeadet tagastada ja ostuprotsess peatada, kasutage <code>wc_add_notice()<\/code>.<\/p>\n<pre><code>add_action('woocommerce_checkout_process', function() {\n    if (!empty($_POST['member_id'])) {\n        $given_member_id = $_POST['member_id'];\n        if (strlen($given_member_id) &lt; 5 || strlen($given_member_id) &gt; 10) {\n            wc_add_notice(__('Invalid member ID', 'textdomain'), 'error');\n        }\n    }\n});<\/code><\/pre>\n<p>J\u00e4rgmine samm on tegelikult v\u00e4lja v\u00e4\u00e4rtuse salvestamine alati, kui keegi tellimuse esitab. Selleks kasutame toimingut <code>woocommerce_checkout_update_order_meta<\/code>ja salvestame v\u00e4lja lihtsalt tellimuse ID postituse metana (mis antakse toimingu parameetrina), hankides v\u00e4\u00e4rtuse alates <code>$_POST<\/code>.<\/p>\n<pre><code>add_action('woocommerce_checkout_update_order_meta', function($order_id) {\n    if (!empty($_POST['member_id'])) {\n        update_post_meta($order_id, 'member_id', sanitize_text_field($_POST['member_id']));\n    }\n}<\/code><\/pre>\n<p>Teie kohandatud v\u00e4li tuleks n\u00fc\u00fcd tellimuste hulka salvestada.<\/p>\n<p>Kui soovite v\u00e4lja kuvada j\u00e4rjekorras admin, lisage sama kood, mis meetodis 1. Lisan selle uuesti siia, kohandades selle n\u00e4ite v\u00e4lja nimega:<\/p>\n<pre><code>add_action('woocommerce_admin_order_data_after_billing_address', function($order) {\n    $member_id = get_post_meta($order-&gt;id, 'member_id', true);\n    if (!empty($member_id)) {\n        echo '&lt;p&gt;&lt;strong&gt;'. __('Member ID', 'textdomain'). ':&lt;\/strong&gt; '. $member_id. '&lt;\/p&gt;';\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>Juhend selle kohta, kuidas muuta, eemaldada v\u00f5i \u00fcmber paigutada WordPress WooCommerce&#8217;i vaikemaksev\u00e4lju ja kuidas lisada oma kohandatud v\u00e4li koodi j\u00e4rgi.<\/p>\n","protected":false},"author":1,"featured_media":239420,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[1110,842,812,812,842,853,853,863,863],"tags":[1165],"class_list":["post-233997","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","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\/233997","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=233997"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233997\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/239420"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=233997"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=233997"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=233997"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}