Remove Shipping&Billing Address from WooCommerce Order Search - woocommerce

I have a website with 50k+ orders, when operators search for an order, they search by name or phone number, after some testing and debugging, I've noticed that one of the reason the search is so slow it's because it searches through the billing/shipping address and I want to remove that.
I've used the following:
function custom_woocommerce_shop_order_search_fields( $search_fields ) {
unset( $search_fields );
$search_fields[] = '_billing_last_name';
$search_fields[] = '_billing_first_name';
$search_fields[] = '_billing_phone';
$search_fields[] = '_billing_email';
return $search_fields;
}
add_filter( 'woocommerce_shop_order_search_fields', 'custom_woocommerce_shop_order_search_fields' );
But doing so, the first and last name skip searches - if I have 5 orders from John Doe, it will sometimes show just 3 or none; As a temporary solution I've disabled this function and came here in hope of enlightenment!

Related

get product variation parent product

How I can get variation parent product ID.
EXAMPLE:
I have product with ID 35
and this product has two variations colors - red (ID 351), black (ID 352)
My code:
$product = wc_get_product(get_the_ID()); //get_the_ID() is ID 351 and I need this parent ID 35
The proper way
As LoicTheAztec suggested in comments, you should use this:
$parent_product = wc_get_product($product->get_parent_id());
The reason why you should retrieve parent product via get_parent_id() is that it will trigger hook woocommerce_product_variation_get_parent_id and it will be easily modifiable by other plugins/themes:
add_filter('woocommerce_product_variation_get_parent_id', function($value, $wc_data) {
// ...
return $value;
}, 10, 2);
This will also work, but it won't trigger WC-specific hooks:
$parent_product_id = wp_get_post_parent_id($product->get_id());
$parent_product = wc_get_product($parent_product_id);
Old answer
Note: That's not working outside the loop and will always return 0 if you attempt to substitute get_the_ID() with $product->id - in that case use $product->get_id() as in the example above.
Use wp_get_post_parent_id, as variations have their parent as the product itself.
Example:
$variation_id = get_the_ID();
$product_id = wp_get_post_parent_id($variation_id);
Never use WC_Product::get_parent():
$parent_product = $product->get_parent(); // will always return '0

Woocommerce discount - percentage only in whole numbers sent to distribution - how to calculate without losses for the customer or company

I am trying to figure out how to control the discount behavior of my website so it collaborates with an external distribution channel. Right now i have a successful mail send with a XML-file attached when the customer has finished paying.
The only data field that is causing trouble is the discount. Because:
The disctribution channel only accepts discount for each item (product) as percentage that is a whole number
I've used simpleXML and added data for each item (sold product) like this - only a section of the full code
// Basic $order data and wp_mail configurations BEFORE
foreach ($order->get_items() as $item) {
$product = $item->get_product();
$isbn = get_field( 'isbn', $item->get_product_id() );
$price = $product->get_price();
$quantity = $item->get_quantity();
$order_line = $order_head->addChild( 'Ordrelinje' );
$order_line->addAttribute( 'besked', 'notat tilknyttet ordrelinjen' );
$order_line->addAttribute( 'rabatprocent', '' );
$order_line->addAttribute( 'stykpris', $price );
$order_line->addAttribute( 'antal', $quantity );
$order_line->addAttribute( 'isbn', $isbn );
}
// SimpleXML save and attachment created with the XML file AFTER
// Sent with wp_mail and the return tested AFTER
So the problem is basically:
I know how to calculate the percentage from full price and discount in the product[] data, but i have difficulties imagine a flexible system with different discount-possibilities (see bottom)
With both percentage- and amount discount you could imagine having a conflict with whole based number when calculating the percentage after purchase. Some decimals would be lost.
Example:
Let's say that i make a discount on one book at 22 KR (danish) and the price without discount were: 143.
Then the discount in percentage would be: 100/143*22: 15.38%.
I would then for example, to get a whole number as percentage, round with round(15.38, 0) to get 15.
And then the customer would lose: .38% that is 143*0.0038 = 0.54KR
So my question is:
Does anyone has an idea how to get solve this, or a workaround so the amount discount is a whole number of the regular price in percentage for example. Or have other ideas?

Force auto replace letters when typing inside order form

Does anyone have an idea on how to auto replace letters in woocommerce order forms! basically I need when someone is typing in greeklish to auto replace those letters to Greek!
I think you will have to use this hook to get the newly created order :
add_action( 'woocommerce_new_order', 'convert_greeklish_for_wc_order', 1, 1 );
function create_invoice_for_wc_order() {
function create_invoice_for_wc_order( $order_id ) {
// get order details data...
$order = new WC_Order( $order_id );
// Here goes the code to get all the fields
// Convert fields to greek
// Set new fields values
};
}
And adapt this code to convert greeklisk to greek:
<?php
function greeklish($new_text){
$greek_len = array('α','ά','Ά','Α','β','Β','γ', 'Γ', 'δ','Δ','ε','έ','Ε','Έ','ζ','Ζ','η','ή','Η','θ','Θ','ι','ί','ϊ','ΐ','Ι','Ί', 'κ','Κ','λ','Λ','μ','Μ','ν','Ν','ξ','Ξ','ο','ό','Ο','Ό','π','Π','ρ','Ρ','σ','ς', 'Σ','τ','Τ','υ','ύ','Υ','Ύ','φ','Φ','χ','Χ','ψ','Ψ','ω','ώ','Ω','Ώ',' ',"'","'",',');
$english_len = array('a', 'a','A','A','b','B','g','G','d','D','e','e','E','E','z','Z','i','i','I','th','Th', 'i','i','i','i','I','I','k','K','l','L','m','M','n','N','x','X','o','o','O','O','p','P' ,'r','R','s','s','S','t','T','u','u','Y','Y','f','F','ch','Ch','ps','Ps','o','o','O','O',' ','',' ',' ');
$new_text = str_replace($greek_len,$english_len,$new_text);
return $new_text;
}
$conv = greeklish("Το κείμενο σου εδώ!");
echo $conv; #To keimeno sou edo!
?>

Custom item prices change in WooC

Have situation with custom price for item line in WooC.
Now find solution to change subtotal in Edit of order this way:
add_action( 'woocommerce_update_order_item', function ($_item_id, $_item, $_order_id) {
if( $arr_item_meta = wc_get_order_item_meta($_item_id) )
{
$prc = wooc_item1_price( $arr_item_meta["_a1"][0], $arr_item_meta["_a2"][0], $arr_item_meta["_a3"][0], $_item->get_product()->get_id() );
$_item -> set_total( $prc );
$_item -> set_subtotal( $prc );
$_item -> save();
}
},10,3);
This only works on edit. I.e. while updated - it set up price i make with function
wooc_item1_price with few argumens from cart (quantities of each type of product)
Problem is:
howto make same after product just added to cart.
So new subtotal+total will be available in order before any edit/updater.
Please help me!
add_action ('woocommerce_calculate_totals', function( $_cart )
{
foreach ($_cart->cart_contents as $cart_key => $cart_item)
{
$prc = function_to_make_item_custom_price(
$_cart->cart_contents[$cart_key]["_param1"],
$_cart->cart_contents[$cart_key]["_param2"],
$_cart->cart_contents[$cart_key]["_param3"],
$_cart->cart_contents[$cart_key]["product_id"]
);
$_cart->cart_contents[$cart_key]['line_subtotal'] = $prc;
$_cart->cart_contents[$cart_key]['line_total'] = $prc;
}
}, 10,1);
this is right way - make price on adding item to cart.
is need have price function function_to_make_item_custom_price to make custom price, based on parameters. In my case - this is quantites of product parts (tour adult&child&infants param1,param2,param3)
Its simplifed idea, is need also recal taxes, coupons ...

Apply logical Pricing on Woocommerce Attributes

Dear I've a Pizza site and I'm using Woocommerce plugin. I want to apply some price check on attributes.
My Question is
I've a Pizza product which attributes are Size and Meat. Size(Small,large) Meat(Chicken, donair meat etc).
I've applied a check on attributes that when a customer select a product size, small and one piece of meat, the price will be $10 on default rate. But I want to apply this logic here that, when a customer select a more than one piece of meat (Extra topping), Then I want to add $2 on total price like ($10 + $2 = 12).
please help me??
Please use this action for adding the extra price on woocommerce cart.Now you need to work on the commented loop code and apply the simple login.Now I have added a summary for how you will work.
I have use it and now it is working on my local system.
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price( $cart_object ) {
$custom_price = 10; // This will be your custome price
foreach ( $cart_object->cart_contents as $key => $value ) {
$productid = $value['product_id'];
$variationArr =$value['variation']; //it is an array have the value : meat and size i.e chicken and small
//In every loop you can count the number of products .
//Note: In array($variationArr),It have all the active attribute of this product which is created by admin in woocommece.
//so you can search it by loop;
/*
* Like
* foreach($variationArr as $k=>$v)
* {
* //here is the variation product size
* }
*
*/
//Now increase the price.
$price = $value['data']->price;
$extraPrice = 2;
$newPrice = $price + $extraPrice;
$value['data']->price = $newPrice;
}
}

Resources