Add to cart button for Vertical and Horizontal results
WooCommerce - Add to cart button for Vertical and Horizontal results
PreviousMaking a product in-stock & out of stock filterNextGet formatted price in result title or in content
Last updated
WooCommerce - Add to cart button for Vertical and Horizontal results
Last updated
While there is no option to display an add to cart button, you can use a custom function to do so.
What is this, and where do I put this custom code?
add_filter('asp_results', 'asp_add_to_cart_data', 1, 1);
function asp_add_to_cart_data($results) {
$product_add_to_cart_text = 'Add to cart';
$variation_add_to_cart_text = 'Choose variation'; // Leave it empty to not display at all
if (class_exists("WooCommerce")) {
$_pf = new WC_Product_Factory();
foreach ($results as &$r) {
if (
$r->content_type == "pagepost" &&
in_array($r->post_type, array("product", "product_variation"))
) {
$product = $_pf->get_product($r->id);
$is_variable = $product->is_type( 'variable' ) || $r->post_type == 'product_variation';
$link = !$is_variable ? get_permalink(wc_get_page_id('shop')) : $product->get_permalink();
$ajax = !$is_variable ? ' ajax_add_to_cart' : '';
$text = !$is_variable ? $product_add_to_cart_text : $variation_add_to_cart_text;
if ( empty($text) )
continue;
ob_start();
?>
<div class="woocommerce">
<a href="<?php echo $link; ?>"
data-quantity="1"
class="button product_type_simple add_to_cart_button<?php echo $ajax; ?>"
data-product_id="<?php echo $r->id; ?>" data-product_sku=""
rel="nofollow"><?php echo $text; ?></a>
</div>
<?php
$button = ob_get_clean();
$r->content .= $button;
}
}
}
return $results;
}
add_action('wp_footer', 'asp_add_to_cart_handler');
function asp_add_to_cart_handler() {
?>
<script>
jQuery(function(t){if("undefined"==typeof wc_add_to_cart_params)return!1;var a=function(){t(".asp_r").on("click",".add_to_cart_button",this.onAddToCart).on("click",".remove_from_cart_button",this.onRemoveFromCart).on("added_to_cart",this.updateButton).on("added_to_cart",this.updateCartPage).on("added_to_cart removed_from_cart",this.updateFragments)};a.prototype.onAddToCart=function(a){var o=t(this);if(o.is(".ajax_add_to_cart")){if(!o.attr("data-product_id"))return!0;a.preventDefault(),o.removeClass("added"),o.addClass("loading");var r={};t.each(o.data(),function(t,a){r[t]=a}),t(document.body).trigger("adding_to_cart",[o,r]),t.post(wc_add_to_cart_params.wc_ajax_url.toString().replace("%%endpoint%%","add_to_cart"),r,function(a){a&&(a.error&&a.product_url?window.location=a.product_url:"yes"!==wc_add_to_cart_params.cart_redirect_after_add?t(document.body).trigger("added_to_cart",[a.fragments,a.cart_hash,o]):window.location=wc_add_to_cart_params.cart_url)})}},a.prototype.onRemoveFromCart=function(a){var o=t(this),r=o.closest(".woocommerce-mini-cart-item");a.preventDefault(),r.block({message:null,overlayCSS:{opacity:.6}}),t.post(wc_add_to_cart_params.wc_ajax_url.toString().replace("%%endpoint%%","remove_from_cart"),{cart_item_key:o.data("cart_item_key")},function(a){a&&a.fragments?t(document.body).trigger("removed_from_cart",[a.fragments,a.cart_hash,o]):window.location=o.attr("href")}).fail(function(){window.location=o.attr("href")})},a.prototype.updateButton=function(a,o,r,e){(e=void 0!==e&&e)&&(e.removeClass("loading"),e.addClass("added"),wc_add_to_cart_params.is_cart||0!==e.parent().find(".added_to_cart").length||e.after(' <a href="'+wc_add_to_cart_params.cart_url+'" class="added_to_cart wc-forward" title="'+wc_add_to_cart_params.i18n_view_cart+'">'+wc_add_to_cart_params.i18n_view_cart+"</a>"),t(document.body).trigger("wc_cart_button_updated",[e]))},a.prototype.updateCartPage=function(){var a=window.location.toString().replace("add-to-cart","added-to-cart");t(".shop_table.cart").load(a+" .shop_table.cart:eq(0) > *",function(){t(".shop_table.cart").stop(!0).css("opacity","1").unblock(),t(document.body).trigger("cart_page_refreshed")}),t(".cart_totals").load(a+" .cart_totals:eq(0) > *",function(){t(".cart_totals").stop(!0).css("opacity","1").unblock(),t(document.body).trigger("cart_totals_refreshed")})},a.prototype.updateFragments=function(a,o){o&&(t.each(o,function(a){t(a).addClass("updating").fadeTo("400","0.6").block({message:null,overlayCSS:{opacity:.6}})}),t.each(o,function(a,o){t(a).replaceWith(o),t(a).stop(!0).css("opacity","1").unblock()}),t(document.body).trigger("wc_fragments_loaded"))},new a});
</script>
<?php
}
..and use this custom CSS code for some basic formatting:
div.asp_r.asp_w .asp_content a.add_to_cart_button,
div.asp_r.asp_w .asp_content a.added_to_cart {
display: none;
padding: 10px 15px !important;
bottom: 5px;
right: 5px;
z-index: 10000000;
position: absolute;
line-height: 13px;
}
div.asp_r.asp_w .asp_content a.added_to_cart {
bottom: 5px;
right: 126px;
background: white;
}
@media only screen
and (min-device-width: 320px)
and (max-device-width: 1024px) {
div.asp_r.asp_w .asp_content a.add_to_cart_button {
display: block !important;
}
}
div.asp_r.asp_w .asp_content:hover a.add_to_cart_button,
div.asp_r.asp_w .asp_content:hover a.added_to_cart {
display: block;
}