{"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":"fragmentos-de-codigo","status":"publish","type":"docs","link":"https:\/\/help.foosales.com\/es\/docs\/topics\/code-snippets\/","title":{"rendered":"Fragmentos de c\u00f3digo"},"content":{"rendered":"<p class=\"notice\">Se trata de un\u00a0<b>A nivel de desarrollador<\/b> documento. Si no est\u00e1 familiarizado con el c\u00f3digo\/plantillas y la resoluci\u00f3n de posibles conflictos, p\u00f3ngase en contacto con un desarrollador que est\u00e9 familiarizado con FooSales y\/o WooCommerce. Estos fragmentos se proporcionan como cortes\u00eda y est\u00e1n pensados como punto de partida para ayudar a cualquier necesidad espec\u00edfica de personalizaci\u00f3n. No podemos ofrecer soporte para personalizaciones bajo nuestra plataforma <a href=\"https:\/\/www.foosales.com\/terms-of-service\/\" target=\"_blank\" rel=\"noopener\">Condiciones de uso<\/a>.<\/p>\n<h3>Capturar las tasas Square al completar un pedido<\/h3>\n<p>Si est\u00e1 utilizando un plugin de exportaci\u00f3n de terceros para exportar sus pedidos y est\u00e1 procesando pagos con Square, es posible que desee incluir las tasas que Square deduce del pago en su exportaci\u00f3n de ventas. Este documento de ayuda conten\u00eda anteriormente un fragmento de c\u00f3digo que capturaba las comisiones de procesamiento de Square como metadatos al finalizar el pedido. Sin embargo, este fragmento de c\u00f3digo no era compatible con los pagos fraccionados y, dado que la estructura del plugin 1.40.0+ ha sido completamente revisada, el fragmento de c\u00f3digo ya no funcionar\u00e1. La funcionalidad contenida en el fragmento de c\u00f3digo se ha a\u00f1adido a la funcionalidad principal del complemento, que tambi\u00e9n admite pagos divididos y varios estados de env\u00edo de pedidos en la versi\u00f3n 1.40.2 del complemento.<\/p>\n<p><strong>Atenci\u00f3n<\/strong> que si previamente ha a\u00f1adido el fragmento de c\u00f3digo a su archivo functions.php, usted <strong>debe quitarlo<\/strong> para evitar errores cr\u00edticos al enviar pedidos a trav\u00e9s de FooSales.<\/p>\n<p>Puede obtener m\u00e1s informaci\u00f3n sobre c\u00f3mo se recaudan las tasas Square en nuestro <a href=\"https:\/\/help.foosales.com\/es\/docs\/temas\/pagos\/integracion-de-pago-square\/#capturing-processing-fees\">Square Documento de ayuda sobre la integraci\u00f3n de pagos<\/a>.<\/p>\n<h3>A\u00f1adir la nota de pedido de FooSales a los correos electr\u00f3nicos de administraci\u00f3n de WooCommerce<\/h3>\n<p>A\u00f1ada el siguiente fragmento de c\u00f3digo al tema <em>funciones.php<\/em> si desea que la \"Nota de pedido\" que ha a\u00f1adido al pedido en FooSales aparezca en los correos electr\u00f3nicos de administraci\u00f3n de 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\tsi no\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;Notas de pedido&#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;A&uacute;n no hay notas para este pedido.&#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>Enviar detalles del pedido desde FooSales, y correo electr\u00f3nico completado desde el sitio web<\/h3>\n<p>A\u00f1ada el siguiente fragmento de c\u00f3digo al tema <em>funciones.php<\/em> archivo si deseas enviar autom\u00e1ticamente el correo electr\u00f3nico con los detalles del pedido cuando se realice un pedido a trav\u00e9s de FooSales, y enviar el correo electr\u00f3nico de confirmaci\u00f3n cuando se realice un pedido a trav\u00e9s de la interfaz de tu sitio web.<\/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>A\u00f1ada el siguiente fragmento de c\u00f3digo al tema <em>funciones.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>A\u00f1ada el siguiente fragmento de c\u00f3digo al tema <em>funciones.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\/es\/wp-json\/wp\/v2\/docs\/53638","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/help.foosales.com\/es\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/help.foosales.com\/es\/wp-json\/wp\/v2\/types\/docs"}],"replies":[{"embeddable":true,"href":"https:\/\/help.foosales.com\/es\/wp-json\/wp\/v2\/comments?post=53638"}],"version-history":[{"count":5,"href":"https:\/\/help.foosales.com\/es\/wp-json\/wp\/v2\/docs\/53638\/revisions"}],"predecessor-version":[{"id":56621,"href":"https:\/\/help.foosales.com\/es\/wp-json\/wp\/v2\/docs\/53638\/revisions\/56621"}],"up":[{"embeddable":true,"href":"https:\/\/help.foosales.com\/es\/wp-json\/wp\/v2\/docs\/14"}],"next":[{"title":"Alojamiento","link":"https:\/\/help.foosales.com\/es\/docs\/topics\/hosting\/","href":"https:\/\/help.foosales.com\/es\/wp-json\/wp\/v2\/docs\/55967"}],"prev":[{"title":"Hoja de ruta FooSales","link":"https:\/\/help.foosales.com\/es\/docs\/topics\/foosales-roadmap\/","href":"https:\/\/help.foosales.com\/es\/wp-json\/wp\/v2\/docs\/34"}],"wp:attachment":[{"href":"https:\/\/help.foosales.com\/es\/wp-json\/wp\/v2\/media?parent=53638"}],"wp:term":[{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/help.foosales.com\/es\/wp-json\/wp\/v2\/doc_tag?post=53638"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}