{"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":"codeschnipsel","status":"publish","type":"docs","link":"https:\/\/help.foosales.com\/de\/docs\/topics\/code-snippets\/","title":{"rendered":"Code-Schnipsel"},"content":{"rendered":"<p class=\"notice\">Dies ist eine\u00a0<b>Entwicklerebene<\/b> Dokument. Wenn Sie mit Code\/Vorlagen und der L\u00f6sung m\u00f6glicher Konflikte nicht vertraut sind, wenden Sie sich bitte an einen Entwickler, der mit FooSales und\/oder WooCommerce vertraut ist. Diese Schnipsel werden aus H\u00f6flichkeit zur Verf\u00fcgung gestellt und sind als Ausgangspunkt f\u00fcr spezifische Anpassungsanforderungen gedacht. Wir sind nicht in der Lage, Unterst\u00fctzung f\u00fcr Anpassungen unter unserer <a href=\"https:\/\/www.foosales.com\/terms-of-service\/\" target=\"_blank\" rel=\"noopener\">Bedingungen der Dienstleistung<\/a>.<\/p>\n<h3>Erfassen von Square-Geb\u00fchren beim Abschluss einer Bestellung<\/h3>\n<p>Wenn Sie ein Export-Plugin eines Drittanbieters verwenden, um Ihre Bestellungen zu exportieren, und Sie Zahlungen mit Square abwickeln, m\u00f6chten Sie vielleicht die Geb\u00fchren, die Square von der Zahlung abzieht, in Ihren Verkaufsexport aufnehmen. Dieses Hilfedokument enthielt bisher einen Codeschnipsel, der die Square-Bearbeitungsgeb\u00fchren als Metadaten bei Auftragsabschluss erfasst hat. Dies unterst\u00fctzte jedoch keine gesplitteten Zahlungen, und da die Struktur des Plugins 1.40.0+ komplett \u00fcberarbeitet wurde, funktioniert der Code-Snippet nicht mehr. Die im Codeschnipsel enthaltene Funktionalit\u00e4t wurde in die Kernfunktionalit\u00e4t des Plugins aufgenommen, die in der Plugin-Version 1.40.2 auch geteilte Zahlungen und verschiedene Bestellungsabgabestatus unterst\u00fctzt.<\/p>\n<p><strong>Bitte beachten Sie<\/strong> dass Sie, wenn Sie den Codeschnipsel zuvor in Ihre Datei functions.php eingef\u00fcgt haben, die <strong>muss es entfernen<\/strong> um kritische Fehler bei der \u00dcbermittlung von Bestellungen \u00fcber FooSales zu vermeiden.<\/p>\n<p>Mehr dar\u00fcber, wie die Square-Geb\u00fchren erfasst werden, erfahren Sie in unserem <a href=\"https:\/\/help.foosales.com\/de\/docs\/themen\/zahlungen\/quadratische-zahlungsintegration\/#capturing-processing-fees\">Square Hilfe-Dokument zur Zahlungsintegration<\/a>.<\/p>\n<h3>F\u00fcgen Sie den Bestellschein von FooSales zu den WooCommerce-Admin-E-Mails hinzu.<\/h3>\n<p>F\u00fcgen Sie den folgenden Codeschnipsel zu Ihrem Theme hinzu <em>funktionen.php<\/em> Datei, wenn Sie m\u00f6chten, dass die \"Auftragsnotiz\", die Sie dem Auftrag in FooSales hinzugef\u00fcgt haben, in den WooCommerce-Admin-E-Mails angezeigt wird.<\/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\tsonst\r\n\t\t$id = 1TP15Bestellung-&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;typ&#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;Bestellnotizen&#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;F&uuml;r diese Bestellung gibt es noch keine Notizen.&#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>Senden Sie die Auftragsdetails von FooSales und die ausgef\u00fcllte E-Mail von der Website<\/h3>\n<p>F\u00fcgen Sie den folgenden Codeschnipsel zu Ihrem Theme hinzu <em>funktionen.php<\/em> Datei, wenn Sie automatisch die E-Mail mit den Bestellungsdetails senden m\u00f6chten, wenn eine Bestellung \u00fcber FooSales aufgegeben wird, und die E-Mail mit den abgeschlossenen Bestellungen senden m\u00f6chten, wenn eine Bestellung \u00fcber das Front-End Ihrer Website aufgegeben wird.<\/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>F\u00fcgen Sie den folgenden Codeschnipsel zu Ihrem Theme hinzu <em>funktionen.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>F\u00fcgen Sie den folgenden Codeschnipsel zu Ihrem Theme hinzu <em>funktionen.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\/de\/wp-json\/wp\/v2\/docs\/53638","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/help.foosales.com\/de\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/help.foosales.com\/de\/wp-json\/wp\/v2\/types\/docs"}],"replies":[{"embeddable":true,"href":"https:\/\/help.foosales.com\/de\/wp-json\/wp\/v2\/comments?post=53638"}],"version-history":[{"count":5,"href":"https:\/\/help.foosales.com\/de\/wp-json\/wp\/v2\/docs\/53638\/revisions"}],"predecessor-version":[{"id":56621,"href":"https:\/\/help.foosales.com\/de\/wp-json\/wp\/v2\/docs\/53638\/revisions\/56621"}],"up":[{"embeddable":true,"href":"https:\/\/help.foosales.com\/de\/wp-json\/wp\/v2\/docs\/14"}],"next":[{"title":"Hosting","link":"https:\/\/help.foosales.com\/de\/docs\/topics\/hosting\/","href":"https:\/\/help.foosales.com\/de\/wp-json\/wp\/v2\/docs\/55967"}],"prev":[{"title":"FooSales-Fahrplan","link":"https:\/\/help.foosales.com\/de\/docs\/topics\/foosales-roadmap\/","href":"https:\/\/help.foosales.com\/de\/wp-json\/wp\/v2\/docs\/34"}],"wp:attachment":[{"href":"https:\/\/help.foosales.com\/de\/wp-json\/wp\/v2\/media?parent=53638"}],"wp:term":[{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/help.foosales.com\/de\/wp-json\/wp\/v2\/doc_tag?post=53638"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}