{"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":"uryvky-kodu","status":"publish","type":"docs","link":"https:\/\/help.foosales.com\/cs\/docs\/topics\/code-snippets\/","title":{"rendered":"\u00daryvky k\u00f3du"},"content":{"rendered":"<p class=\"notice\">Jedn\u00e1 se o\u00a0<b>Na \u00farovni v\u00fdvoj\u00e1\u0159\u016f<\/b> dokument. Pokud nejste obezn\u00e1meni s k\u00f3dem\/\u0161ablonami a \u0159e\u0161en\u00edm potenci\u00e1ln\u00edch konflikt\u016f, obra\u0165te se na v\u00fdvoj\u00e1\u0159e, kter\u00fd je obezn\u00e1men s FooSales a\/nebo WooCommerce. Tyto \u00faryvky jsou poskytov\u00e1ny jako zdvo\u0159ilostn\u00ed informace a maj\u00ed slou\u017eit jako v\u00fdchoz\u00ed bod pro pomoc p\u0159i p\u0159\u00edpadn\u00fdch specifick\u00fdch pot\u0159eb\u00e1ch p\u0159izp\u016fsoben\u00ed. Nejsme schopni poskytovat podporu pro \u00fapravy v r\u00e1mci na\u0161ich <a href=\"https:\/\/www.foosales.com\/terms-of-service\/\" target=\"_blank\" rel=\"noopener\">Podm\u00ednky slu\u017eby<\/a>.<\/p>\n<h3>Zachycen\u00ed poplatk\u016f Square p\u0159i dokon\u010dov\u00e1n\u00ed objedn\u00e1vky<\/h3>\n<p>Pokud k exportu objedn\u00e1vek pou\u017e\u00edv\u00e1te exportn\u00ed plugin t\u0159et\u00ed strany a zpracov\u00e1v\u00e1te platby pomoc\u00ed Square, mo\u017en\u00e1 budete cht\u00edt do exportu prodeje zahrnout poplatky, kter\u00e9 Square z platby ode\u010dte. Tento dokument n\u00e1pov\u011bdy d\u0159\u00edve obsahoval \u00faryvek k\u00f3du, kter\u00fd zachycoval poplatky za zpracov\u00e1n\u00ed Square jako metadata p\u0159i dokon\u010den\u00ed objedn\u00e1vky. Ten v\u0161ak nepodporoval d\u011blen\u00e9 platby, a proto\u017ee struktura z\u00e1suvn\u00e9ho modulu 1.40.0+ byla zcela p\u0159epracov\u00e1na, fragment k\u00f3du ji\u017e nebude fungovat. Funkce obsa\u017een\u00e1 v \u00faryvku k\u00f3du byla p\u0159id\u00e1na do z\u00e1kladn\u00ed funkce pluginu, kter\u00e1 ve verzi pluginu 1.40.2 podporuje tak\u00e9 rozd\u011blen\u00e9 platby a r\u016fzn\u00e9 stavy odesl\u00e1n\u00ed objedn\u00e1vky<\/p>\n<p><strong>Vezm\u011bte pros\u00edm na v\u011bdom\u00ed<\/strong> \u017ee pokud jste p\u0159edt\u00edm p\u0159idali \u00faryvek k\u00f3du do souboru functions.php. <strong>mus\u00ed ji odstranit<\/strong> abyste p\u0159ede\u0161li kritick\u00fdm chyb\u00e1m p\u0159i zad\u00e1v\u00e1n\u00ed objedn\u00e1vek prost\u0159ednictv\u00edm FooSales.<\/p>\n<p>V\u00edce informac\u00ed o tom, jak se poplatky Square zachycuj\u00ed, najdete v na\u0161em \u010dl\u00e1nku. <a href=\"https:\/\/help.foosales.com\/cs\/dokumenty\/temata\/platby\/integrace-plateb-na-namesti\/#capturing-processing-fees\">Dokument n\u00e1pov\u011bdy k integraci plateb Square<\/a>.<\/p>\n<h3>P\u0159id\u00e1n\u00ed pozn\u00e1mky k objedn\u00e1vce z FooSales do e-mail\u016f spr\u00e1vce WooCommerce<\/h3>\n<p>P\u0159idejte n\u00e1sleduj\u00edc\u00ed \u00faryvek k\u00f3du do t\u00e9matu. <em>functions.php<\/em> pokud chcete, aby se \"Pozn\u00e1mka k objedn\u00e1vce\", kterou jste p\u0159idali k objedn\u00e1vce v FooSales, zobrazovala v e-mailech spr\u00e1vce 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\tjinak\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;\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;Order Notes&#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;K t&eacute;to objedn&aacute;vce zat&iacute;m nejsou \u017e&aacute;dn&eacute; pozn&aacute;mky.&#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>Odeslat podrobnosti objedn\u00e1vky z FooSales a vypln\u011bn\u00fd e-mail z webov\u00e9 str\u00e1nky<\/h3>\n<p>P\u0159idejte n\u00e1sleduj\u00edc\u00ed \u00faryvek k\u00f3du do t\u00e9matu. <em>functions.php<\/em> soubor, pokud chcete automaticky odeslat e-mail s podrobnostmi o objedn\u00e1vce, kdy\u017e je objedn\u00e1vka zad\u00e1na prost\u0159ednictv\u00edm FooSales, a odeslat e-mail s dokon\u010denou objedn\u00e1vkou, kdy\u017e je objedn\u00e1vka zad\u00e1na prost\u0159ednictv\u00edm front-endu va\u0161ich webov\u00fdch str\u00e1nek.<\/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>P\u0159idejte n\u00e1sleduj\u00edc\u00ed \u00faryvek k\u00f3du do t\u00e9matu. <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>P\u0159idejte n\u00e1sleduj\u00edc\u00ed \u00faryvek k\u00f3du do t\u00e9matu. <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\/cs\/wp-json\/wp\/v2\/docs\/53638","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/help.foosales.com\/cs\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/help.foosales.com\/cs\/wp-json\/wp\/v2\/types\/docs"}],"replies":[{"embeddable":true,"href":"https:\/\/help.foosales.com\/cs\/wp-json\/wp\/v2\/comments?post=53638"}],"version-history":[{"count":5,"href":"https:\/\/help.foosales.com\/cs\/wp-json\/wp\/v2\/docs\/53638\/revisions"}],"predecessor-version":[{"id":56621,"href":"https:\/\/help.foosales.com\/cs\/wp-json\/wp\/v2\/docs\/53638\/revisions\/56621"}],"up":[{"embeddable":true,"href":"https:\/\/help.foosales.com\/cs\/wp-json\/wp\/v2\/docs\/14"}],"next":[{"title":"Hostov\u00e1n\u00ed","link":"https:\/\/help.foosales.com\/cs\/docs\/topics\/hosting\/","href":"https:\/\/help.foosales.com\/cs\/wp-json\/wp\/v2\/docs\/55967"}],"prev":[{"title":"Pl\u00e1n FooSales","link":"https:\/\/help.foosales.com\/cs\/docs\/topics\/foosales-roadmap\/","href":"https:\/\/help.foosales.com\/cs\/wp-json\/wp\/v2\/docs\/34"}],"wp:attachment":[{"href":"https:\/\/help.foosales.com\/cs\/wp-json\/wp\/v2\/media?parent=53638"}],"wp:term":[{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/help.foosales.com\/cs\/wp-json\/wp\/v2\/doc_tag?post=53638"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}