{"id":53638,"date":"2021-02-10T17:54:47","date_gmt":"2021-02-11T00:54:47","guid":{"rendered":"https:\/\/help.foosales.com\/docs\/topics\/code-snippets\/"},"modified":"2026-09-11T02:24:30","modified_gmt":"2026-09-11T08:24:30","slug":"fragmenty-kodu","status":"publish","type":"docs","link":"https:\/\/help.foosales.com\/pl\/docs\/topics\/code-snippets\/","title":{"rendered":"Fragmenty kodu"},"content":{"rendered":"<p class=\"notice\">To jest\u00a0<b>Poziom deweloperski<\/b> dokument. Je\u015bli nie jeste\u015b zaznajomiony z kodem\/szablonami i rozwi\u0105zywaniem potencjalnych konflikt\u00f3w, skontaktuj si\u0119 z programist\u0105 zaznajomionym z FooSales i\/lub WooCommerce. Te fragmenty s\u0105 dostarczane jako uprzejmo\u015b\u0107 i maj\u0105 s\u0142u\u017cy\u0107 jako punkt wyj\u015bcia do pomocy w okre\u015blonych potrzebach dostosowywania. Nie jeste\u015bmy w stanie zapewni\u0107 wsparcia dla dostosowa\u0144 w ramach naszych <a href=\"https:\/\/www.foosales.com\/terms-of-service\/\" target=\"_blank\" rel=\"noopener\">Warunki \u015bwiadczenia us\u0142ug<\/a>.<\/p>\n<h3>Przechwytywanie op\u0142at Square podczas realizacji zam\u00f3wienia<\/h3>\n<p>Je\u015bli korzystasz z wtyczki eksportowej innej firmy do eksportowania zam\u00f3wie\u0144 i przetwarzasz p\u0142atno\u015bci za pomoc\u0105 Square, mo\u017cesz chcie\u0107 uwzgl\u0119dni\u0107 op\u0142aty, kt\u00f3re Square odlicza od p\u0142atno\u015bci w eksporcie sprzeda\u017cy. Ten dokument pomocy zawiera\u0142 wcze\u015bniej fragment kodu, kt\u00f3ry przechwytywa\u0142 op\u0142aty za przetwarzanie Square jako metadane po zako\u0144czeniu zam\u00f3wienia. Nie obs\u0142ugiwa\u0142o to jednak p\u0142atno\u015bci podzielonych, a poniewa\u017c struktura wtyczki 1.40.0+ zosta\u0142a ca\u0142kowicie zmieniona, fragment kodu nie b\u0119dzie ju\u017c dzia\u0142a\u0142. Funkcjonalno\u015b\u0107 zawarta we fragmencie kodu zosta\u0142a dodana do podstawowej funkcjonalno\u015bci wtyczki, kt\u00f3ra obs\u0142uguje r\u00f3wnie\u017c p\u0142atno\u015bci podzielone i r\u00f3\u017cne statusy przesy\u0142ania zam\u00f3wie\u0144 w wersji wtyczki 1.40.2.<\/p>\n<p><strong>Uwaga<\/strong> \u017ce je\u015bli wcze\u015bniej doda\u0142e\u015b fragment kodu do pliku functions.php, to <strong>musi go usun\u0105\u0107<\/strong> aby zapobiec krytycznym b\u0142\u0119dom podczas sk\u0142adania zam\u00f3wie\u0144 za po\u015brednictwem FooSales.<\/p>\n<p>Wi\u0119cej informacji na temat sposobu rejestrowania op\u0142at Square mo\u017cna znale\u017a\u0107 w naszej witrynie <a href=\"https:\/\/help.foosales.com\/pl\/dokumenty\/tematy\/platnosci\/integracja-platnosci-kwadratowych\/#capturing-processing-fees\">Dokument pomocy integracji p\u0142atno\u015bci Square<\/a>.<\/p>\n<h3>Dodaj notatk\u0119 zam\u00f3wienia z FooSales do wiadomo\u015bci e-mail administratora WooCommerce.<\/h3>\n<p>Dodaj nast\u0119puj\u0105cy fragment kodu do motywu <em>functions.php<\/em> je\u015bli chcesz, aby \"Notatka o zam\u00f3wieniu\" dodana do zam\u00f3wienia w FooSales by\u0142a wy\u015bwietlana w wiadomo\u015bciach e-mail administratora WooCommerce.<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">add_action( &#039;woocommerce_email_order_meta&#039;, &#039;woo_add_order_notes_to_email&#039;, 10, 4 );\r\n\r\nfunction woo_add_order_notes_to_email($order, $sent_to_admin, $plain_text, $email) {\r\n\r\n\tif ( isset($post-&amp;gt;ID) )\r\n\t\t$id = $post-&amp;gt;ID;\r\n\telse\r\n\t\t$id = $order-&amp;gt;ID;\r\n\r\n\r\n\tif ($sent_to_admin &amp;amp;&amp;amp; &#039;foosales_app&#039; == get_post_meta($id, &#039;_foosales_order_source&#039;, true)) {\r\n\t\t$args = array(\r\n\t\t\t&#039;order_id&#039; =&amp;gt; $id,\r\n\t\t\t&#039;type&#039; =&amp;gt; &#039;&#039;\r\n\t\t);\r\n\t\t\r\n\t\t$notes = wc_get_order_notes( $args );\r\n\t\t\r\n\t\techo &#039;&lt;h2&gt;&#039; . __( &#039;Uwagi do zam&oacute;wienia&#039;, &#039;woocommerce&#039; ) . &#039;&lt;\/h2&gt;&#039;;\r\n\r\n\t\techo &#039;&lt;ul class=&quot;order_notes&quot;&gt;&#039;;\r\n\r\n\t\tif ( $notes ) {\r\n\t\t\t\t?&amp;gt;\r\n\t\t\t\t&lt;li&gt;\r\n\t\t\t\t\t&lt;div class=&quot;note_content&quot;&gt;\r\n\t\t\t\t\t\tcontent ) ) ); ?&amp;gt;\r\n\t\t\t\t\t&lt;\/div&gt;\r\n\t\t\t\t&lt;\/li&gt;\r\n\t\t\t\t&amp;lt;?php } else { echo &amp;#039;&lt;li&gt;&#039; . __( &#039;Nie ma jeszcze notatek dla tego zam&oacute;wienia.&#039;, &#039;woocommerce&#039; ) . &#039;&lt;\/li&gt;&#039;;\r\n\t\t}\r\n\r\n\t\techo &#039;&lt;\/ul&gt;&#039;;\r\n\t}\r\n}<\/pre>\n<h3>Wy\u015blij szczeg\u00f3\u0142y zam\u00f3wienia z FooSales i wype\u0142nion\u0105 wiadomo\u015b\u0107 e-mail ze strony internetowej<\/h3>\n<p>Dodaj nast\u0119puj\u0105cy fragment kodu do motywu <em>functions.php<\/em> plik, je\u015bli chcesz automatycznie wysy\u0142a\u0107 wiadomo\u015b\u0107 e-mail ze szczeg\u00f3\u0142ami zam\u00f3wienia, gdy zam\u00f3wienie zostanie z\u0142o\u017cone za po\u015brednictwem FooSales, i wys\u0142a\u0107 wiadomo\u015b\u0107 e-mail z zako\u0144czonym zam\u00f3wieniem, gdy zam\u00f3wienie zostanie z\u0142o\u017cone za po\u015brednictwem interfejsu u\u017cytkownika witryny.<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\nadd_filter( &#039;woocommerce_email_enabled_customer_completed_order&#039;, &#039;is_foosales&#039;, 9999, 2 );\r\n\r\nfunction is_foosales($enabled, $order ) {\r\n\tif ( ! empty( $order ) &amp;&amp; &#039;foosales_app&#039; === $order-&gt;get_meta( &#039;_foosales_order_source&#039;, true ) ) {\r\n\t\treturn false;\r\n\t}\r\n\treturn $enabled;\r\n}\r\n\r\nadd_action( &#039;woocommerce_order_status_completed&#039;, &#039;send_invoice_on_completed&#039; );\r\nfunction send_invoice_on_completed( $order_id ) {\r\n\t$wc_order = wc_get_order($order_id);\r\n\tif ( ! empty( $wc_order ) &amp;&amp; &#039;foosales_app&#039; === $wc_order-&gt;get_meta( &#039;_foosales_order_source&#039;, true ) ) {\r\n\t\t$emails = WC()-&gt;mailer()-&gt;get_emails();\r\n    \t$emails&#x5B;&#039;WC_Email_Customer_Invoice&#039;]-&gt;trigger( $order_id );\r\n\t}\r\n    \r\n}<\/pre>\n<h3>Implement partial use for coupon codes<\/h3>\n<p>Dodaj nast\u0119puj\u0105cy fragment kodu do motywu <em>functions.php<\/em> file if you want to enable the partial use of coupon codes. This means that if the coupon code amount is more than the total price of the items being purchased, then the amount owed would be 0 and the total price will be deducted from the coupon code amount so that there is credit left to be used in the future.<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n\/\/ 1. Process coupon adjustments on active order completion\/processing\r\nadd_action( &#039;woocommerce_order_status_processing&#039;, &#039;adjust_partially_used_coupon_amount&#039;, 10, 1 );\r\nadd_action( &#039;woocommerce_order_status_completed&#039;, &#039;adjust_partially_used_coupon_amount&#039;, 10, 1 );\r\n\r\nfunction adjust_partially_used_coupon_amount( $order_id ) {\r\n    $order = wc_get_order( $order_id );\r\n    if ( ! $order ) {\r\n        return;\r\n    }\r\n\r\n    \/\/ Prevent code from running multiple times on the same order\r\n    if ( $order-&gt;get_meta( &#039;_coupon_amount_adjusted&#039; ) ) {\r\n        return;\r\n    }\r\n\r\n    $coupons = $order-&gt;get_coupons();\r\n    \r\n    foreach ( $coupons as $item ) {\r\n        $code   = $item-&gt;get_code();\r\n        $coupon = new WC_Coupon( $code );\r\n        \r\n        \/\/ Only target fixed cart discount coupons\r\n        if ( $coupon-&gt;get_id() &amp;&amp; $coupon-&gt;is_type( &#039;fixed_cart&#039; ) ) {\r\n            $coupon_original_amount = (float) $coupon-&gt;get_amount();\r\n            $discount_used          = (float) $item-&gt;get_discount();\r\n\r\n            if ( $coupon_original_amount &gt; $discount_used ) {\r\n                \/\/ PARTIAL USE: Reduce balance and restore 1 usage count so it stays active\r\n                $remaining_balance = $coupon_original_amount - $discount_used;\r\n                $coupon-&gt;set_amount( $remaining_balance );\r\n                \r\n                $usage_count = $coupon-&gt;get_usage_count();\r\n                if ( $usage_count &gt; 0 ) {\r\n                    $coupon-&gt;set_usage_count( $usage_count - 1 );\r\n                }\r\n                \r\n                $coupon-&gt;save();\r\n            } elseif ( $coupon_original_amount &gt; 0 &amp;&amp; abs( $coupon_original_amount - $discount_used ) &lt; 0.001 ) {\r\n                \/\/ FINAL USE: Full remaining balance spent. Set balance to 0.\r\n                \/\/ Leave usage_count alone so WooCommerce natural limits apply.\r\n                $coupon-&gt;set_amount( 0 );\r\n                $coupon-&gt;save();\r\n            }\r\n        }\r\n    }\r\n\r\n    \/\/ Mark order as processed so status changes don&#039;t re-trigger this logic\r\n    $order-&gt;update_meta_data( &#039;_coupon_amount_adjusted&#039;, &#039;yes&#039; );\r\n    $order-&gt;save();\r\n}\r\n\r\n\/\/ 2. Restore coupon balance if order is cancelled, refunded, or failed\r\nadd_action( &#039;woocommerce_order_status_cancelled&#039;, &#039;restore_partially_used_coupon_amount&#039;, 10, 1 );\r\nadd_action( &#039;woocommerce_order_status_refunded&#039;, &#039;restore_partially_used_coupon_amount&#039;, 10, 1 );\r\nadd_action( &#039;woocommerce_order_status_failed&#039;, &#039;restore_partially_used_coupon_amount&#039;, 10, 1 );\r\n\r\nfunction restore_partially_used_coupon_amount( $order_id ) {\r\n    $order = wc_get_order( $order_id );\r\n    if ( ! $order ) {\r\n        return;\r\n    }\r\n\r\n    \/\/ Only attempt restoration if the coupon was previously deducted on this order\r\n    if ( ! $order-&gt;get_meta( &#039;_coupon_amount_adjusted&#039; ) ) {\r\n        return;\r\n    }\r\n\r\n    \/\/ Prevent double-restoration if status changes between cancelled\/refunded\r\n    if ( $order-&gt;get_meta( &#039;_coupon_amount_restored&#039; ) ) {\r\n        return;\r\n    }\r\n\r\n    $coupons = $order-&gt;get_coupons();\r\n\r\n    foreach ( $coupons as $item ) {\r\n        $code   = $item-&gt;get_code();\r\n        $coupon = new WC_Coupon( $code );\r\n\r\n        if ( $coupon-&gt;get_id() &amp;&amp; $coupon-&gt;is_type( &#039;fixed_cart&#039; ) ) {\r\n            $current_balance  = (float) $coupon-&gt;get_amount();\r\n            $discount_applied = (float) $item-&gt;get_discount();\r\n\r\n            if ( $discount_applied &gt; 0 ) {\r\n                $restored_balance = $current_balance + $discount_applied;\r\n                $coupon-&gt;set_amount( $restored_balance );\r\n\r\n                \/\/ If coupon was completely depleted (0) and is now restored, reduce usage count so it reactivates\r\n                if ( $current_balance == 0 &amp;&amp; $restored_balance &gt; 0 ) {\r\n                    $usage_count = $coupon-&gt;get_usage_count();\r\n                    if ( $usage_count &gt; 0 ) {\r\n                        $coupon-&gt;set_usage_count( $usage_count - 1 );\r\n                    }\r\n                }\r\n\r\n                $coupon-&gt;save();\r\n            }\r\n        }\r\n    }\r\n\r\n    \/\/ Mark order meta as restored\r\n    $order-&gt;update_meta_data( &#039;_coupon_amount_restored&#039;, &#039;yes&#039; );\r\n    $order-&gt;save();\r\n}\r\n<\/pre>\n<h3>Hide WooCommerce Point of Sale Settings<\/h3>\n<p>Dodaj nast\u0119puj\u0105cy fragment kodu do motywu <em>functions.php<\/em> file if you want to hide the <a href=\"https:\/\/woocommerce.com\/document\/configuring-woocommerce-settings\/#point-of-sale\" target=\"_blank\" rel=\"noopener\">Point of Sale settings<\/a> added by WooCommerce as of version 11.<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n\/\/ Remove the built-in WooCommerce Point of Sale settings tab.\r\nadd_filter( &#039;woocommerce_settings_tabs_array&#039;, &#039;remove_wc_pos_settings_tab&#039;, 999, 1 );\r\nfunction remove_wc_pos_settings_tab( $tabs ) {\r\n    if ( isset( $tabs&#x5B;&#039;point-of-sale&#039;] ) ) {\r\n        unset( $tabs&#x5B;&#039;point-of-sale&#039;] );\r\n    }\r\n\r\n    return $tabs;\r\n}\r\n\r\n\/\/ Remove the All Sales Channels filter on the Orders page.\r\nadd_action( &#039;admin_head&#039;, &#039;hide_sales_channel_order_filter&#039; );\r\nfunction hide_sales_channel_order_filter() {\r\n    $screen = get_current_screen();\r\n    \/\/ Target the WooCommerce orders listing screen\r\n    if ( isset( $screen-&gt;id ) &amp;&amp; ( $screen-&gt;id === &#039;woocommerce_page_wc-orders&#039; || $screen-&gt;id === &#039;edit-shop_order&#039; ) ) {\r\n        echo &#039;&lt;style&gt;\r\n            select&#x5B;name=&quot;_created_via&quot;],\r\n            #sales_channel { \r\n                display: none !important; \r\n            }\r\n        &lt;\/style&gt;&#039;;\r\n    }\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>","protected":false},"featured_media":0,"parent":14,"menu_order":20,"comment_status":"open","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"default","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"default","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_is_vendor_doc":"0","footnotes":""},"doc_tag":[],"class_list":["post-53638","docs","type-docs","status-publish","hentry"],"comment_count":0,"_links":{"self":[{"href":"https:\/\/help.foosales.com\/pl\/wp-json\/wp\/v2\/docs\/53638","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/help.foosales.com\/pl\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/help.foosales.com\/pl\/wp-json\/wp\/v2\/types\/docs"}],"replies":[{"embeddable":true,"href":"https:\/\/help.foosales.com\/pl\/wp-json\/wp\/v2\/comments?post=53638"}],"version-history":[{"count":5,"href":"https:\/\/help.foosales.com\/pl\/wp-json\/wp\/v2\/docs\/53638\/revisions"}],"predecessor-version":[{"id":56621,"href":"https:\/\/help.foosales.com\/pl\/wp-json\/wp\/v2\/docs\/53638\/revisions\/56621"}],"up":[{"embeddable":true,"href":"https:\/\/help.foosales.com\/pl\/wp-json\/wp\/v2\/docs\/14"}],"next":[{"title":"Hosting","link":"https:\/\/help.foosales.com\/pl\/docs\/topics\/hosting\/","href":"https:\/\/help.foosales.com\/pl\/wp-json\/wp\/v2\/docs\/55967"}],"prev":[{"title":"Mapa drogowa FooSales","link":"https:\/\/help.foosales.com\/pl\/docs\/topics\/foosales-roadmap\/","href":"https:\/\/help.foosales.com\/pl\/wp-json\/wp\/v2\/docs\/34"}],"wp:attachment":[{"href":"https:\/\/help.foosales.com\/pl\/wp-json\/wp\/v2\/media?parent=53638"}],"wp:term":[{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/help.foosales.com\/pl\/wp-json\/wp\/v2\/doc_tag?post=53638"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}