Untitled
unknown
plain_text
2 years ago
5.3 kB
16
Indexable
add_filter('b2bking_go_to_offers_text', function($text){
return '-> Add Offer to Cart';
}, 10, 1);
add_filter('b2bking_offers_link_final', function($link, $offerid){
$link = admin_url( 'admin-ajax.php' ).'?action=addofferajax&offer='.$offerid;
return $link;
}, 10, 2);
function addofferajax() {
// Do something!
// If nonce verification didn't fail, run further
$offer_id = sanitize_text_field($_GET['offer']);
// Add offer to cart
$offer_details = get_post_meta(apply_filters( 'wpml_object_id', $offer_id, 'post' , true), 'b2bking_offer_details', true);
$products = explode ('|', $offer_details);
$cart_item_data['b2bking_offer_id'] = $offer_id;
$cart_item_data['b2bking_offer_name'] = get_the_title(apply_filters( 'wpml_object_id', $offer_id, 'post' , true));
$cart_item_data['b2bking_numberofproducts'] = count($products);
$i = 1;
foreach($products as $product){
$details = explode(';',$product);
// if item is in the form product_id, change title
$isproductid = explode('_', $details[0]);
if ($isproductid[0] === 'product'){
// it is a product+id, get product title
$newproduct = wc_get_product($isproductid[1]);
$details[0] = $newproduct->get_name();
//if product is a variation with 3 or more attributes, need to change display because get_name doesnt
// show items correctly
if (is_a($newproduct,'WC_Product_Variation')){
$attributes = $newproduct->get_variation_attributes();
$number_of_attributes = count($attributes);
if ($number_of_attributes > 2){
$details[0].=' - ';
foreach ($attributes as $attribute){
$details[0].=$attribute.', ';
}
$details[0] = substr($details[0], 0, -2);
}
}
if (isset($cart_item_data['b2bking_products_stock'])){
$temp_stock = $cart_item_data['b2bking_products_stock'].$isproductid[1].':'.$details[1].';';
} else {
$temp_stock = $isproductid[1].':'.$details[1].';'; // id:quantity;id:quantity
}
$cart_item_data['b2bking_products_stock'] = $temp_stock;
}
$cart_item_data['b2bking_product_'.$i.'_name'] = $details[0];
$cart_item_data['b2bking_product_'.$i.'_quantity'] = $details[1];
$cart_item_data['b2bking_product_'.$i.'_price'] = $details[2];
$i++;
}
$cart_item_data = apply_filters('b2bking_before_add_offer_to_cart', $cart_item_data);
// Create B2B offer product if it doesn't exist
$offer_id = intval(get_option('b2bking_offer_product_id_setting', 0));
if ( !get_post_status ( $offer_id ) ) {
$offer = array(
'post_title' => 'Offer',
'post_status' => 'customoffer',
'post_type' => 'product',
'post_author' => 1,
);
$product_id = wp_insert_post($offer);
//Set product hidden:
$terms = array( 'exclude-from-catalog', 'exclude-from-search' );
wp_set_object_terms( $product_id, $terms, 'product_visibility' );
wp_set_object_terms( $product_id, 'simple', 'product_type' );
update_post_meta( $product_id, '_visibility', 'hidden' );
update_post_meta( $product_id, '_stock_status', 'instock');
update_post_meta( $product_id, '_regular_price', '' );
update_post_meta( $product_id, '_sale_price', '' );
update_post_meta( $product_id, '_purchase_note', '' );
update_post_meta( $product_id, '_product_attributes', array() );
update_post_meta( $product_id, '_sale_price_dates_from', '' );
update_post_meta( $product_id, '_sale_price_dates_to', '' );
update_post_meta( $product_id, '_price', '1' );
update_post_meta( $product_id, '_sold_individually', '' );
// set option to product id
update_option( 'b2bking_offer_product_id_setting', $product_id );
$offer_id = intval(get_option('b2bking_offer_product_id_setting', 0));
}
$offer_id = apply_filters('b2bking_offer_id_before_add_offer_to_cart', $offer_id, $cart_item_data['b2bking_offer_id']);
WC()->cart->add_to_cart( $offer_id, 1, 0, array(), $cart_item_data);
do_action('b2bking_after_add_offer_to_cart', $offer_id);
// Maybe redirect back to where they came from?
wp_redirect( get_permalink( wc_get_page_id( 'cart' ) ) );
exit;
}
add_action( 'wp_ajax_nopriv_addofferajax', 'addofferajax' );
add_action( 'wp_ajax_addofferajax', 'addofferajax' );
add_action('wp', function(){
if (!is_user_logged_in()){
global $b2bking_public;
if (intval(get_option('b2bking_enable_offers_setting', 1)) === 1){
add_action( 'woocommerce_before_calculate_totals', array($b2bking_public, 'b2bking_offer_change_price_cart') );
// Add content to offers endpoint
add_action( 'woocommerce_account_'.get_option('b2bking_offers_endpoint_setting','offers').'_endpoint', array($b2bking_public, 'b2bking_offers_endpoint_content') );
// Change product price in the minicart for offers
add_filter('woocommerce_cart_item_price', array($b2bking_public, 'b2bking_offer_change_price_minicart'), 10, 3);
// Add offer item metadata to order (checkout + backend)
add_action( 'woocommerce_checkout_create_order_line_item', array($b2bking_public,'b2bking_add_item_metadata_to_order'), 20, 4 );
// Display offer item metadata in cart
add_filter('woocommerce_cart_item_name', array($b2bking_public, 'b2bking_display_metadata_cart'),1,3);
// if offer has 1 item, set that item to be offer image
add_filter( 'woocommerce_cart_item_thumbnail', array($b2bking_public,'filter_offer_image'), 10, 3);
}
}
});Editor is loading...
Leave a Comment