Thursday, April 2, 2026

How to make changeable price of product on POS ?

 since version 2.2.4, we support feature changeable price of product on POS, it mean cashier can change price of product when add it to cart. You can see how it work follow image below

image
click item on cart, you see price , click on price 

image

change price and click Save.

To active this feature on our plugin, pls copy this code to end of file yourtheme/function.php

if(!function_exists('pricechangeable_op_product_data'))
{
    function pricechangeable_op_product_data($product_data,$product){
        $product_data['allow_change_price'] = true;
        
        return $product_data;
    }
}
add_filter('op_product_data','pricechangeable_op_product_data',10,2);
after done, goto pos , logout and login again and see effect.


This no need sine version 3.9. it implement as default plugin function https://prnt.sc/qnwfx8

How to ignore send email with new order made by POS ?

 Few my customer have request ignore send order receipt to customer via email with order made by POS. This is guide how to do it .


Add this code below to end of file : your_current_theme/function.php

if(!function_exists('custom_op_woocommerce_email_recipient_customer_invoice'))
{
    function custom_op_woocommerce_email_recipient_customer_invoice($recipient,$_order)
    {
        $billing_email = $_order->get_billing_email();
        $is_pos = get_post_meta($_order->get_id(),'_op_order_source',true);
        if($is_pos == 'openpos')
        {
            $recipient = '';
        }
        return $recipient;
    }
}
add_filter('woocommerce_email_recipient_customer_completed_order','custom_op_woocommerce_email_recipient_customer_invoice',10,2);
If you want disable all order email notification made from POS ( included customer + admin) , Add this code below to end of file : your_current_theme/function.php

if(!function_exists('custom_op_woocommerce_disable_email'))
{
    function custom_op_woocommerce_disable_email($recipient,$_order)
    {
        global $op_session_data;
        if($op_session_data)
        {
            $recipient = '';
        }
        return $recipient;
    }
}

add_filter('woocommerce_email_recipient_customer_completed_order','custom_op_woocommerce_disable_email',10,2);
add_filter('woocommerce_email_recipient_customer_invoice','custom_op_woocommerce_disable_email',10,2);
add_filter('woocommerce_email_recipient_customer_on_hold_order','custom_op_woocommerce_disable_email',10,2);
add_filter('woocommerce_email_recipient_customer_processing_order','custom_op_woocommerce_disable_email',10,2);
add_filter('woocommerce_email_recipient_customer_refunded_order','custom_op_woocommerce_disable_email',10,2);

add_filter('woocommerce_email_recipient_new_order','custom_op_woocommerce_disable_email',10,2);
add_filter('woocommerce_email_recipient_cancelled_order','custom_op_woocommerce_disable_email',10,2);
add_filter('woocommerce_email_recipient_failed_order','custom_op_woocommerce_disable_email',10,2);

How to display Variation product on grid instead select variable option

 Some use case, customer don't want select variation attribute, they want direct product on grid / search result. To do this , just simple add this filter code to your_active_theme/functions.php

if(!function_exists('custom_op_product_display_all'))
{
    function custom_op_product_display_all($product_data,$product){
        $product_data['display'] = true;
        $_product = wc_get_product($product_data['id']);
        if($_product)
        {

            if($_product->get_type() == 'variable')
            {
                $product_data['display'] = false; // option if you hide parent variable product

            }
        }
        if($product->post_type == 'product_variation')
        {
            $parent_id = $product->post_parent;
            if($parent_id)
            {
                $parent_product = wc_get_product($parent_id);
                $category = $parent_product->get_category_ids();

                $product_data['categories'] = $category;

            }
        }

        return $product_data;
    }
}
add_filter('op_product_data','custom_op_product_display_all',100,2);


And after done, just resync product list follow this way 

image

And this is result:

image
 

How to disable InStore features

 There are few my customer don't want update one by one for instore feature, they want all product on all outlet is same. you can do it by place this code to your_active_theme/functions.php


function custom_op_warehouse_is_instore($result){
    return true;
}
add_filter('op_warehouse_is_instore','custom_op_warehouse_is_instore',10,1);

How to disable Cart Custom Discount / Cart Custom Item Discount on POS

 You can do it by add this code to your_theme/functions.php


function custom_pos_discount_permission($session_response_data){
    
    $session_response_data['setting']['pos_disable_item_discount'] = 'yes';
    $session_response_data['setting']['pos_disable_cart_discount'] = 'yes';
    return $session_response_data;

}
add_filter('op_get_login_cashdrawer_data','custom_pos_discount_permission',10,1);

How to connect Open POS with stripe terminal "Verifone P400"

 on video https://www.youtube.com/watch?v=YrO7Gh7JHR8&list=PL5HioxGp7f8bbtcro2qdSm1EhPQnHPiQ9&index=31&t=82s


at video description. it already suggest to download and install free plugin:

https://wpos.app/openpos-addons/#ex-openpos-stripe-terminal


after install , goto admin/pos/setting/ payment setting , enable, save , and enter stripe information for connection
- goto admin/pos/register edit your register, choose terminal device you want for your register
- goto pos panel , clean browser cache, close and open again + test again ..

#note: make sure your terminal device should set currency + location in stripe terminal

dl

  download