File "Module.php"
Full Path: /home/attunedd/public_html/wp-content/plugins/carousel-slider/modules/ProductCarousel/Module.php
File size: 5.26 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace CarouselSlider\Modules\ProductCarousel;
use Automattic\WooCommerce\Utilities\FeaturesUtil;
use WC_Product;
defined( 'ABSPATH' ) || exit;
/**
* Module class
*
* @package Modules/ProductCarousel
*/
class Module {
/**
* The instance of the class
*
* @var self
*/
protected static $instance;
/**
* Ensures only one instance of the class is loaded or can be loaded.
*
* @return self
*/
public static function init() {
if ( is_null( self::$instance ) ) {
self::$instance = new self();
add_filter( 'carousel_slider/register_view', [ self::$instance, 'view' ] );
add_action( 'carousel_slider_after_shop_loop_item', [ self::$instance, 'quick_view_button' ], 10, 2 );
add_action( 'carousel_slider_after_shop_loop_item', [ self::$instance, 'wish_list_button' ], 12, 2 );
add_action( 'wp_ajax_carousel_slider_quick_view', [ self::$instance, 'quick_view' ] );
add_action( 'wp_ajax_nopriv_carousel_slider_quick_view', [ self::$instance, 'quick_view' ] );
add_action( 'before_woocommerce_init', [ self::$instance, 'declaring_extension_compatibility' ] );
Admin::init();
}
return self::$instance;
}
/**
* Declaring extension compatibility
*/
public function declaring_extension_compatibility() {
if ( class_exists( FeaturesUtil::class ) ) {
FeaturesUtil::declare_compatibility( 'custom_order_tables', CAROUSEL_SLIDER_FILE, true );
}
}
/**
* Register view
*
* @param array $views Registered views.
*
* @return array
*/
public function view( array $views ): array {
$views['product-carousel'] = new View();
return $views;
}
/**
* Show quick view button on product slider
*
* @param WC_Product $product The WC_Product object.
* @param int $slider_id The slider id.
*/
public static function quick_view_button( $product, $slider_id ) {
$_show_btn = get_post_meta( $slider_id, '_product_quick_view', true );
if ( 'on' === $_show_btn ) {
wp_enqueue_script( 'magnific-popup' );
$quick_view_html = '<div style="clear: both;"></div>';
$quick_view_html .= sprintf(
'<a class="magnific-popup button quick_view" href="%1$s" data-product-id="%2$s">%3$s</a>',
Helper::get_product_quick_view_url( $product->get_id() ),
$product->get_id(),
__( 'Quick View', 'carousel-slider' )
);
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo apply_filters( 'carousel_slider_product_quick_view', $quick_view_html, $product );
}
}
/**
* Show YITH Wishlist button on product slider
*
* @param WC_Product $product The WC_Product object.
* @param int $slider_id The slider id.
*/
public static function wish_list_button( $product, $slider_id ) {
$_product_wish_list = get_post_meta( $slider_id, '_product_wishlist', true );
if ( class_exists( 'YITH_WCWL' ) && 'on' === $_product_wish_list ) {
echo do_shortcode( '[yith_wcwl_add_to_wishlist product_id="' . $product->get_id() . '"]' );
}
}
/**
* Display quick view popup content
*/
public static function quick_view() {
if ( ! isset( $_GET['_wpnonce'], $_GET['product_id'] ) ) {
wp_die();
}
if ( ! wp_verify_nonce( $_GET['_wpnonce'], 'carousel_slider_quick_view' ) ) {
wp_die();
}
global $product;
$product = wc_get_product( intval( $_GET['product_id'] ) );
$html = static::get_quick_view_html( $product );
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo apply_filters( 'carousel_slider/product_quick_view_html', $html, $product );
wp_die();
}
/**
* Get quick view html
*
* @param WC_Product $product The WC_Product object.
*
* @return string
*/
public static function get_quick_view_html( WC_Product $product ): string {
ob_start();
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
$slider_id = isset( $_GET['slide_id'] ) ? intval( $_GET['slide_id'] ) : 0;
?>
<div id="pmid-<?php echo esc_attr( $slider_id ); ?>" class="product carousel-slider__product-modal">
<div class="images">
<?php echo get_the_post_thumbnail( $product->get_id(), 'medium_large' ); ?>
<?php if ( $product->is_on_sale() ) : ?>
<?php
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo apply_filters(
'woocommerce_sale_flash',
'<span class="onsale">' . __( 'Sale!', 'carousel-slider' ) . '</span>',
$product
);
?>
<?php endif; ?>
</div>
<div class="summary entry-summary">
<h1 class="product_title entry-title">
<?php echo esc_html( $product->get_title() ); ?>
</h1>
<div class="woocommerce-product-rating">
<?php
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo wc_get_rating_html( $product->get_average_rating() );
?>
</div>
<div class="price">
<?php
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo $product->get_price_html();
?>
</div>
<div class="description">
<div style="clear: both;"></div>
<?php
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo apply_filters( 'woocommerce_short_description', $product->get_description() );
?>
</div>
<div>
<div style="clear: both;"></div>
<?php woocommerce_template_loop_add_to_cart(); ?>
</div>
</div>
</div>
<?php
return ob_get_clean();
}
}