PK œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Dir : /home/trave494/princesspicnicevents.com/wp-content/themes/soledad/inc/woocommerce/modules/ |
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 IP: 209.182.202.254 |
Dir : /home/trave494/princesspicnicevents.com/wp-content/themes/soledad/inc/woocommerce/modules/misc.php |
<?php class penci_product_misc { protected static $instance; function __construct() { add_action( 'wp_ajax_penci_update_cart_item', array( $this, 'penci_update_cart_item' ) ); add_action( 'wp_ajax_nopriv_penci_update_cart_item', array( $this, 'penci_update_cart_item' ) ); add_action( 'wp_ajax_penci_ajax_load_products', array( $this, 'ajax_load_products' ) ); add_action( 'wp_ajax_nopriv_penci_ajax_load_products', array( $this, 'ajax_load_products' ) ); add_action( 'wp_ajax_penci_get_product_info', array( $this, 'get_product_info' ) ); add_action( 'wp_ajax_nopriv_penci_get_product_info', array( $this, 'get_product_info' ) ); add_filter( 'woocommerce_sale_flash', array( $this, 'product_label' ), 10 ); add_action( 'woocommerce_before_single_product_summary', array( $this, 'penci_top_relate_products' ), 5 ); add_action( 'penci_woocommerce_before_main_shop_content_right', function () { echo '<div class="penci-wofilter-inner">'; }, 4 ); add_action( 'penci_woocommerce_before_main_shop_content_right', array( $this, 'product_grid_label' ), 5 ); add_action( 'penci_woocommerce_before_main_shop_content_right', array( $this, 'product_style_select' ), 5 ); add_action( 'penci_woocommerce_before_main_shop_content_right', array( $this, 'top_catalog_product_filter_trigger' ), 9 ); add_action( 'penci_woocommerce_before_main_shop_content_right', function () { echo '</div>'; }, 9 ); add_action( 'woocommerce_shop_loop_item_title', array( $this, 'product_categories_link' ), 15 ); add_action( 'init', array( $this, 'login_to_see_price' ), 200 ); add_action( 'wp_footer', array( $this, 'mobile_nav_menu' ) ); add_filter( 'wp_nav_menu_items', array( $this, 'mobile_menu_filter' ), 10, 2 ); if ( ! get_theme_mod( 'penci_woo_cat_enable_sidebar' ) ) { add_action( 'woocommerce_archive_description', array( $this, 'top_catalog_product_filter' ), 5 ); } remove_action( 'woocommerce_cart_is_empty', 'wc_empty_cart_message', 10 ); add_action( 'woocommerce_cart_is_empty', array( $this, 'empty_cart_message' ), 10 ); add_action( 'penci_footer_nav_cart_item', array( $this, 'mobile_cart_totals' ) ); add_action( 'woocommerce_add_to_cart_fragments', array( $this, 'mobile_cart_totals_fragment' ) ); add_action( 'wp_ajax_penci_add_to_cart_variable', array( $this, 'penci_add_to_cart_variable' ) ); add_action( 'wp_ajax_nopriv_penci_add_to_cart_variable', array( $this, 'penci_add_to_cart_variable' ) ); add_action( 'woocommerce_after_shop_loop', array( $this, 'blog_search_result' ), 100 ); add_action( 'penci_after_search_loop', array( $this, 'product_search_result' ), 100 ); } public static function get_instance() { if ( null == self::$instance ) { self::$instance = new self(); } return self::$instance; } public function penci_top_relate_products() { if ( wc_get_loop_prop( 'quickview', false ) || ! get_theme_mod( 'penci_single_product_top_related_product', true ) ) { return; } $current_id = apply_filters( 'penci_top_relate_products_exclude', get_the_ID() ); $top_relate_products = get_posts( array( 'post_type' => 'product', 'post__not_in' => array( $current_id ), 'posts_per_page' => 2, ) ); if ( $top_relate_products ) { echo '<div class="penci-top-relate-post"><ul>'; $count = 0; foreach ( $top_relate_products as $product_item ) { $id = $product_item->ID; $product = wc_get_product( $id ); $classes = 0 == $count ? 'left' : 'right'; $link = ( penci_is_shop_on_front() ) ? home_url() : get_post_type_archive_link( 'product' ); $seperator = '<li class="item-shop-link"><a class="icon-link" href="' . esc_url( $link ) . '"><svg height="14px" viewBox="-19 -19 600 600" width="14px" xmlns="http://www.w3.org/2000/svg"><path d="m251.25 12.5c0-6.90625-5.59375-12.5-12.5-12.5h-226.25c-6.90625 0-12.5 5.59375-12.5 12.5v226.25c0 6.90625 5.59375 12.5 12.5 12.5h226.25c6.90625 0 12.5-5.59375 12.5-12.5zm-25 213.75h-201.25v-201.25h201.25zm0 0"/><path d="m562.5 12.5c0-6.90625-5.59375-12.5-12.5-12.5h-226.25c-6.90625 0-12.5 5.59375-12.5 12.5v226.25c0 6.90625 5.59375 12.5 12.5 12.5h226.25c6.90625 0 12.5-5.59375 12.5-12.5zm-25 213.75h-201.25v-201.25h201.25zm0 0"/><path d="m251.25 323.75c0-6.90625-5.59375-12.5-12.5-12.5h-226.25c-6.90625 0-12.5 5.59375-12.5 12.5v226.25c0 6.90625 5.59375 12.5 12.5 12.5h226.25c6.90625 0 12.5-5.59375 12.5-12.5zm-25 212.5h-201.25v-200h201.25zm0 0"/><path d="m562.5 323.75c0-6.90625-5.59375-12.5-12.5-12.5h-226.25c-6.90625 0-12.5 5.59375-12.5 12.5v226.25c0 6.90625 5.59375 12.5 12.5 12.5h226.25c6.90625 0 12.5-5.59375 12.5-12.5zm-25 212.5h-201.25v-200h201.25zm0 0"/></svg></a></li>'; $seperator = 'left' == $classes ? $seperator : ''; echo '<li class="top-ralate-item ' . $classes . '"><a href="' . get_permalink( $id ) . '"><span class="item-icon"><i class="penciicon-' . $classes . '-chevron"></i></span></a>'; echo '<div class="inner-content"><div class="top-ralate-item__image"><a href="' . get_permalink( $id ) . '">' . get_the_post_thumbnail( $id, 'woocommerce_gallery_thumbnail' ) . '</a></div>'; echo '<div class="top-ralate-item__summary"><h4><a href="' . get_permalink( $id ) . '">' . get_the_title( $id ) . '</a></h4><span class="price"><a href="' . get_permalink( $id ) . '">' . $product->get_price_html() . '</a></span></div></div>'; echo '</li>' . $seperator; $count ++; } echo '</ul></div>'; } } public function penci_product_quantity( $product ) { if ( ! $product->is_sold_individually() && 'variable' != $product->get_type() && $product->is_purchasable() && $product->is_in_stock() ) { woocommerce_quantity_input( array( 'min_value' => 1, 'max_value' => $product->backorders_allowed() ? '' : $product->get_stock_quantity(), ) ); } } public function penci_update_cart_item() { if ( ( isset( $_GET['item_id'] ) && $_GET['item_id'] ) && ( isset( $_GET['qty'] ) ) ) { global $woocommerce; if ( $_GET['qty'] ) { $woocommerce->cart->set_quantity( $_GET['item_id'], $_GET['qty'] ); } else { $woocommerce->cart->remove_cart_item( $_GET['item_id'] ); } } WC_AJAX::get_refreshed_fragments(); } function product_label() { global $product; $output = array(); $percentage_label = get_theme_mod( 'penci_woo_label_percentage', true ); if ( $product->is_on_sale() ) { $percentage = ''; if ( $product->get_type() == 'variable' && $percentage_label ) { $available_variations = $product->get_variation_prices(); $max_percentage = 0; foreach ( $available_variations['regular_price'] as $key => $regular_price ) { $sale_price = $available_variations['sale_price'][ $key ]; if ( $sale_price < $regular_price ) { $percentage = round( ( ( $regular_price - $sale_price ) / $regular_price ) * 100 ); if ( $percentage > $max_percentage ) { $max_percentage = $percentage; } } } $percentage = $max_percentage; } elseif ( ( $product->get_type() == 'simple' || $product->get_type() == 'external' || $product->get_type() == 'variation' ) && $percentage_label ) { $percentage = round( ( ( $product->get_regular_price() - $product->get_sale_price() ) / $product->get_regular_price() ) * 100 ); } if ( $percentage ) { $output[] = '<span class="onsale product-label">-' . $percentage . '%' . '</span>'; } else { $output[] = '<span class="onsale product-label">' . penci_woo_translate_text( 'penci_woo_trans_sale' ) . '</span>'; } } if ( ! $product->is_in_stock() ) { $output[] = '<span class="out-of-stock product-label">' . penci_woo_translate_text( 'penci_woo_trans_sold_out' ) . '</span>'; } if ( $product->is_featured() && get_theme_mod( 'penci_woo_label_hot_product', true ) ) { $output[] = '<span class="featured product-label">' . penci_woo_translate_text( 'penci_woo_trans_hot' ) . '</span>'; } if ( $this->is_new_label_needed( $product->get_id() ) ) { $output[] = '<span class="new product-label">' . penci_woo_translate_text( 'penci_woo_trans_new' ) . '</span>'; } if ( $output ) { echo '<div class="product-labels labels-' . get_theme_mod( 'penci_woo_label_style', 'square' ) . '">' . implode( '', $output ) . '</div>'; } } public function is_new_label_needed( $product_id ) { $enable = get_theme_mod( 'penci_woo_label_new_product', true ); $new = penci_get_single_product_meta( $product_id, 'product_extra_options', 'permanent_new_label' ); $newness_days = get_theme_mod( 'penci_woo_label_new_product_period', 7 ); $product = wc_get_product( $product_id ); $created = strtotime( $product->get_date_created() ); if ( $new ) { return true; } if ( $enable && $newness_days && ( time() - ( 60 * 60 * 24 * $newness_days ) ) < $created ) { return true; } return false; } public function product_grid_label() { if ( ! wc_get_loop_prop( 'is_paginated' ) || ! woocommerce_products_will_display() ) { return; } $default_posts_per_page = array( penci_woo_get_products_per_page() ); $per_page_options = get_theme_mod( 'penci_woo_post_per_page_variations', '9,24,36,-1' ); $products_per_page_options = ( ! empty( $per_page_options ) ) ? explode( ',', $per_page_options ) : array( '12' => 12, '24' => 24, '36' => 36, ); $products_per_page_options = array_unique( array_merge( $default_posts_per_page, $products_per_page_options ) ); asort( $products_per_page_options ); ?> <div class="penci-products-per-page"> <span class="per-page-title"> <?php echo penci_woo_translate_text( 'penci_woo_trans_show' ); ?> </span> <?php foreach ( $products_per_page_options as $key => $value ) : $classes = ''; $args = array( 'per_page' => $value, ); $link = add_query_arg( $args, penci_shop_page_link( true ) ); if ( (int) penci_woo_get_products_per_page() === (int) $value ) { // phpcs:ignore $classes .= ' current-variation'; } ?> <a rel="nofollow noopener" href="<?php echo esc_url( $link ); ?>" class="per-page-variation<?php echo esc_attr( $classes ); ?>"> <span> <?php $text = '%s'; esc_html( printf( $text, $value == - 1 ? penci_woo_translate_text( 'penci_woo_trans_all' ) : $value ) ); ?> </span> </a> <?php endforeach; ?> </div> <?php } public function product_style_select( $is_element ) { if ( ! wc_get_loop_prop( 'is_paginated' ) || ! woocommerce_products_will_display() ) { return; } $shop_view = get_theme_mod( 'penci_shop_product_view', 'grid_list' ); $per_row_selector = get_theme_mod( 'penci_woo_per_row_columns_selector', true ); $columns_settings = get_theme_mod( 'penci_shop_product_columns', 3 ); $per_row_options = ( 4 >= $columns_settings ) ? array( 2, 3, 4 ) : array( 2, 3, 4, 5, 6 ); $current_shop_view = penci_get_shop_view(); $current_per_row = penci_get_products_columns_per_row(); $products_per_row_options = ( ! empty( $per_row_options ) ) ? array_unique( $per_row_options ) : array( 2, 3, 4 ); if ( 'list' === $shop_view || ( 'grid' === $shop_view && ! $per_row_selector ) || ( 'grid' === $shop_view && ! $per_row_options ) ) { return; } ?> <div class="penci-products-shop-view <?php echo esc_attr( 'products-view-' . $shop_view ); ?>"> <?php if ( 'grid' !== $shop_view ) : ?> <?php $classes = ''; $args = array( 'shop_view' => 'list', ); if ( $is_element ) { $args['shortcode'] = true; } if ( ( 'list' === $current_shop_view && ! $is_element ) || ( $is_element && isset( $_GET['shop_view'] ) && 'list' === $_GET['shop_view'] ) ) { // phpcs:ignore $classes .= ' current-variation'; } $link = add_query_arg( $args, penci_shop_page_link( true ) ); ?> <a rel="nofollow noopener" href="<?php echo esc_url( $link ); ?>" class="shop-view per-row-list<?php echo esc_attr( $classes ); ?>"> <svg class="icon"> <use xlink:href="#list"/> </svg> </a> <?php endif ?> <?php if ( $per_row_selector && $per_row_options ) : ?> <?php foreach ( $products_per_row_options as $key => $value ) : ?> <?php if ( 0 === $value ) { continue; } $classes = ''; $args = array( 'shop_view' => 'grid', 'per_row' => $value, ); if ( $is_element ) { $args['shortcode'] = true; } $current_columns = null; if ( empty( $_GET['per_row'] ) ) { $current_columns = wc_get_loop_prop( 'columns' ); } if ( 'list' !== $current_shop_view && ( (int) $value === (int) $current_per_row && ! $is_element ) || ( $is_element && isset( $_GET['per_row'] ) && $_GET['per_row'] === $value ) ) { // phpcs:ignore $classes .= ' current-variation'; } $classes .= ' per-row-' . $value; $link = add_query_arg( $args, penci_shop_page_link( true ) ); ?> <a title="<?php echo sprintf( esc_attr__( 'Show %s columns', 'soledad' ), $value ); ?>" rel="nofollow noopener" href="<?php echo esc_url( $link ); ?>" class="shop-view<?php echo esc_attr( $classes ); ?>"> <svg class="icon"> <use xlink:href="#columns-<?php echo esc_attr( $value ); ?>"/> </svg> </a> <?php endforeach; ?> <?php endif ?> <div hidden> <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <symbol id="columns-2" viewBox="0 0 444 444"><title>columns-2</title> <path d="m7 0h181c3.867188 0 7 3.132812 7 7v181c0 3.867188-3.132812 7-7 7h-181c-3.867188 0-7-3.132812-7-7v-181c0-3.867188 3.132812-7 7-7zm0 0"/> <path d="m256 0h181c3.867188 0 7 3.132812 7 7v181c0 3.867188-3.132812 7-7 7h-181c-3.867188 0-7-3.132812-7-7v-181c0-3.867188 3.132812-7 7-7zm0 0"/> <path d="m7 249h181c3.867188 0 7 3.132812 7 7v181c0 3.867188-3.132812 7-7 7h-181c-3.867188 0-7-3.132812-7-7v-181c0-3.867188 3.132812-7 7-7zm0 0"/> <path d="m256 249h181c3.867188 0 7 3.132812 7 7v181c0 3.867188-3.132812 7-7 7h-181c-3.867188 0-7-3.132812-7-7v-181c0-3.867188 3.132812-7 7-7zm0 0"/> </symbol> <symbol id="columns-3" viewBox="0 0 512 512"><title>columns-3</title> <g> <g> <rect x="180.67" y="361.33" width="150.67" height="150.67"/> </g> </g> <g> <g> <rect x="180.67" y="180.66" width="150.67" height="150.67"/> </g> </g> <g> <g> <rect x="361.33" width="150.67" height="150.66"/> </g> </g> <g> <g> <rect y="180.66" width="150.67" height="150.67"/> </g> </g> <g> <g> <rect x="361.33" y="180.66" width="150.67" height="150.67"/> </g> </g> <g> <g> <rect y="361.33" width="150.67" height="150.67"/> </g> </g> <g> <g> <rect x="361.33" y="361.33" width="150.67" height="150.67"/> </g> </g> <g> <g> <rect width="150.67" height="150.66"/> </g> </g> <g> <g> <rect x="180.67" width="150.67" height="150.66"/> </g> </g> </symbol> <symbol id="columns-4" viewBox="0 0 397.061 397.061"><title>columns-4</title> <rect x="104.49" y="208.98" width="83.592" height="83.592"/> <rect x="104.49" y="0" width="83.592" height="83.592"/> <rect x="104.49" y="313.469" width="83.592" height="83.592"/> <rect x="104.49" y="104.49" width="83.592" height="83.592"/> <rect x="5.224" y="208.98" width="78.367" height="83.592"/> <rect x="5.224" y="313.469" width="78.367" height="83.592"/> <rect x="5.224" y="0" width="78.367" height="83.592"/> <rect x="5.224" y="104.49" width="78.367" height="83.592"/> <rect x="208.98" y="208.98" width="83.592" height="83.592"/> <rect x="313.469" y="104.49" width="78.367" height="83.592"/> <rect x="313.469" y="208.98" width="78.367" height="83.592"/> <rect x="313.469" y="0" width="78.367" height="83.592"/> <rect x="208.98" y="313.469" width="83.592" height="83.592"/> <rect x="208.98" y="104.49" width="83.592" height="83.592"/> <rect x="208.98" y="0" width="83.592" height="83.592"/> <rect x="313.469" y="313.469" width="78.367" height="83.592"/> </symbol> <symbol id="columns-5" viewBox="0 0 24 19"> <rect width="4" height="4"/> <rect x="5" width="4" height="4"/> <rect x="10" width="4" height="4"/> <rect x="15" width="4" height="4"/> <rect x="20" width="4" height="4"/> <rect y="5" width="4" height="4"/> <rect x="5" y="5" width="4" height="4"/> <rect x="10" y="5" width="4" height="4"/> <rect x="15" y="5" width="4" height="4"/> <rect x="20" y="5" width="4" height="4"/> <rect y="10" width="4" height="4"/> <rect x="5" y="10" width="4" height="4"/> <rect x="10" y="10" width="4" height="4"/> <rect x="15" y="10" width="4" height="4"/> <rect x="20" y="10" width="4" height="4"/> <rect y="15" width="4" height="4"/> <rect x="5" y="15" width="4" height="4"/> <rect x="10" y="15" width="4" height="4"/> <rect x="15" y="15" width="4" height="4"/> <rect x="20" y="15" width="4" height="4"/> </symbol> <symbol id="columns-6" viewBox="0 0 23 19"> <rect width="3" height="4"/> <rect x="4" width="3" height="4"/> <rect x="8" width="3" height="4"/> <rect x="12" width="3" height="4"/> <rect x="16" width="3" height="4"/> <rect x="20" width="3" height="4"/> <rect y="5" width="3" height="4"/> <rect x="4" y="5" width="3" height="4"/> <rect x="8" y="5" width="3" height="4"/> <rect x="12" y="5" width="3" height="4"/> <rect x="16" y="5" width="3" height="4"/> <rect x="20" y="5" width="3" height="4"/> <rect y="10" width="3" height="4"/> <rect x="4" y="10" width="3" height="4"/> <rect x="8" y="10" width="3" height="4"/> <rect x="12" y="10" width="3" height="4"/> <rect x="16" y="10" width="3" height="4"/> <rect x="20" y="10" width="3" height="4"/> <rect y="15" width="3" height="4"/> <rect x="4" y="15" width="3" height="4"/> <rect x="8" y="15" width="3" height="4"/> <rect x="12" y="15" width="3" height="4"/> <rect x="16" y="15" width="3" height="4"/> <rect x="20" y="15" width="3" height="4"/> </symbol> <symbol id="list" viewBox="0 0 512 512"><title>list</title> <g> <g> <path d="M501.333,42.667H138.667c-5.888,0-10.667,4.779-10.667,10.667S132.779,64,138.667,64h362.667 C507.221,64,512,59.221,512,53.333S507.221,42.667,501.333,42.667z"/> </g> </g> <g> <g> <path d="M352,106.667H138.667c-5.888,0-10.667,4.779-10.667,10.667S132.779,128,138.667,128H352 c5.888,0,10.667-4.779,10.667-10.667S357.888,106.667,352,106.667z"/> </g> </g> <g> <g> <path d="M501.333,213.333H138.667c-5.888,0-10.667,4.779-10.667,10.667s4.779,10.667,10.667,10.667h362.667 c5.888,0,10.667-4.779,10.667-10.667S507.221,213.333,501.333,213.333z"/> </g> </g> <g> <g> <path d="M352,277.333H138.667c-5.888,0-10.667,4.779-10.667,10.667s4.779,10.667,10.667,10.667H352 c5.888,0,10.667-4.779,10.667-10.667S357.888,277.333,352,277.333z"/> </g> </g> <g> <g> <path d="M501.333,384H138.667c-5.888,0-10.667,4.779-10.667,10.667s4.779,10.667,10.667,10.667h362.667 c5.888,0,10.667-4.779,10.667-10.667S507.221,384,501.333,384z"/> </g> </g> <g> <g> <path d="M352,448H138.667c-5.888,0-10.667,4.779-10.667,10.667s4.779,10.667,10.667,10.667H352 c5.888,0,10.667-4.779,10.667-10.667S357.888,448,352,448z"/> </g> </g> <g> <g> <circle cx="42.667" cy="85.333" r="42.667"/> </g> </g> <g> <g> <circle cx="42.667" cy="256" r="42.667"/> </g> </g> <g> <g> <circle cx="42.667" cy="426.667" r="42.667"/> </g> </g> </symbol> </svg> </div> </div> <?php } public function product_categories_link() { global $product; if ( ! wc_get_loop_prop( 'loop_categories', true ) ) { return; } $terms = get_the_terms( $product->get_id(), 'product_cat' ); if ( ! $terms ) { return; } $terms_array = array(); $parent = array(); $child = array(); $links = array(); foreach ( $terms as $term ) { $terms_array[ $term->term_id ] = $term; if ( ! $term->parent ) { $parent[ $term->term_id ] = $term->name; } } foreach ( $terms as $term ) { if ( $term->parent ) { unset( $parent[ $term->parent ] ); if ( array_key_exists( $term->parent, $terms_array ) ) { $child[ $term->parent ] = get_term( $term->parent )->name; } $child[ $term->term_id ] = $term->name; } } $terms = $child + $parent; foreach ( $terms as $key => $value ) { $links[] = '<a href="' . esc_url( get_term_link( $key ) ) . '" rel="tag">' . esc_html( $value ) . '</a>'; } ?> <div class="penci-product-cats"> <?php echo implode( ', ', $links ); // phpcs:ignore ?> </div> <?php } public function login_to_see_price() { $restrict_price = get_theme_mod( 'penci_woocommerce_restrict_cart_price', false ); if ( ! is_user_logged_in() && $restrict_price ) { add_filter( 'woocommerce_get_price_html', array( $this, 'login_to_see_price_html' ) ); add_filter( 'woocommerce_loop_add_to_cart_link', '__return_false' ); // Add to cart btns remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 ); remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 ); } } public function login_to_see_price_html() { $restrict_price = get_theme_mod( 'penci_woocommerce_restrict_cart_price', false ); if ( ! is_user_logged_in() && $restrict_price ) { return '<a href="' . esc_url( get_permalink( wc_get_page_id( 'myaccount' ) ) ) . '" class="restrict-price-tag">' . penci_woo_translate_text( 'penci_woo_trans_lgtspr' ) . '</a>'; } } public function top_catalog_product_filter() { ?> <div id="penci-top-product-filter" class="penci-top-product-filter"> <?php dynamic_sidebar( 'penci-shop-sidebar' ); ?> </div> <?php } public function top_catalog_product_filter_trigger() { if ( ! get_theme_mod( 'pencidesign_woo_filter_widget_enable', true ) ) { return false; } ?> <div class="penci-product-top-filter-button"> <a class="penci-filter-button" title="<?php echo penci_woo_translate_text( 'penci_woo_trans_sidebar_filter' ); ?>" href="#penci-top-product-filter"> <i> <svg enable-background="new 0 0 512 512" height="20" viewBox="0 0 512 512" width="20" xmlns="http://www.w3.org/2000/svg"> <g> <path d="m90.5 0h-30v362h-30v90h30v60h30v-60h30v-90h-30zm0 422h-30v-30h30z"/> <path d="m481.5 362h-30v-362h-30v362h-30v90h30v60h30v-60h30zm-30 60h-30v-30h30z"/> <path d="m331.5 0h-30v222h-30v90h30v200h30v-200h30v-90h-30zm0 282h-30v-30h30z"/> <path d="m210.5 0h-30v53.652h-30v90h30v368.348h30v-368.348h30v-90h-30zm0 113.652h-30v-30h30z"/> </g> </svg> </i> <span><?php echo penci_woo_translate_text( 'penci_woo_trans_sidebar_filter' ); ?></span> </a> </div> <?php } public function ajax_load_products() { $preloader = isset( $_GET['preloader'] ) ? $_GET['preloader'] : false; $nonce = isset( $_REQUEST['requestid'] ) ? $_REQUEST['requestid'] : false; if ( ! wp_verify_nonce( $nonce, 'ajax-nonce' ) ) { die( __( 'Ooppppp', 'soledad' ) ); } elseif ( ! empty( $_GET['settings'] ) ) { penci_elementor_products_template( $_GET['settings'], $preloader ); die(); } } public function product_sale_countdown() { global $product; $sale_date_end = get_post_meta( $product->get_id(), '_sale_price_dates_to', true ); $sale_date_start = get_post_meta( $product->get_id(), '_sale_price_dates_from', true ); if ( $product->get_type() == 'variable' ) { // Variations cache $cache = apply_filters( 'pencicountdown_variable_cache', true ); $transient_name = 'pencicountdown_variable_cache_' . $product->get_id(); $available_variations = array(); if ( $cache ) { $available_variations = get_transient( $transient_name ); } if ( ! $available_variations ) { $available_variations = $product->get_available_variations(); if ( $cache ) { set_transient( $transient_name, $available_variations, apply_filters( 'pencicountdown_variable_cache_time', WEEK_IN_SECONDS ) ); } } if ( $available_variations ) { $sale_date_end = get_post_meta( $available_variations[0]['variation_id'], '_sale_price_dates_to', true ); $sale_date_start = get_post_meta( $available_variations[0]['variation_id'], '_sale_price_dates_from', true ); } } $curent_date = strtotime( date( 'Y-m-d H:i:s' ) ); if ( $sale_date_end < $curent_date || $curent_date < $sale_date_start ) { return; } $timezone = 'GMT'; if ( apply_filters( 'penciwp_timezone', false ) ) { $timezone = wc_timezone_string(); } wp_enqueue_script( 'woo-countdown' ); echo '<div class="penci-product-countdown penci-time-countdown" data-end-date="' . esc_attr( date( 'Y-m-d H:i:s', $sale_date_end ) ) . '" data-timezone="' . $timezone . '"></div>'; } public function mobile_nav_menu() { if ( penci_is_shop_archive() ) { wc_get_template_part( 'global/mobile-bottom-nav' ); } } public function mobile_menu_filter( $items, $args ) { $menu_id = get_theme_mod( 'penci_woo_mobile_nav_menu' ); if ( penci_is_shop_catelog() && $args->menu == $menu_id ) { $items .= '<li class="cart-filter"><a href="#sidebar-product-filter"><i class="fa fa-filter" aria-hidden="true"></i>' . penci_woo_translate_text( 'penci_woo_trans_fasort' ) . '</a></li>'; } return $items; } public function get_product_info() { $data = array(); if ( isset( $_REQUEST['requestid'] ) && isset( $_REQUEST['id'] ) && wp_verify_nonce( $_REQUEST['requestid'], 'ajax-nonce' ) ) { $id = $_REQUEST['id']; $data = array( 'title' => get_the_title( $id ), 'item_link' => get_the_permalink( $id ), 'img' => get_the_post_thumbnail_url( $id, 'woocommerce_gallery_thumbnail' ), ); } wp_send_json_success( $data, 200 ); } public function empty_cart_message() { ?> <div class="woocommerce-content-wrapper"> <div class="penci-empty-cart penci-empty-page penci-empty-page-text"> <h3 class="penci-compare-empty-title"><?php echo penci_woo_translate_text( 'penci_woo_cart_empty_title' ) ?></h3> <?php echo penci_woo_translate_text( 'penci_woo_cart_empty_textarea' ) ?> </div> </div> <?php } public function mobile_cart_totals() { echo '<span class="penci-mobile-cart-item current-item">' . WC()->cart->get_cart_contents_count() . '</span>'; } public function mobile_cart_totals_fragment( $fragments ) { global $woocommerce; ob_start(); ?> <span class="penci-mobile-cart-item current-item"><?php echo esc_attr( $woocommerce->cart->cart_contents_count ); ?></span> <?php $fragments['span.penci-mobile-cart-item.current-item'] = ob_get_clean(); return $fragments; } public function penci_add_to_cart_variable() { ob_start(); $product_id = apply_filters( 'woocommerce_add_to_cart_product_id', absint( $_POST['product_id'] ) ); $quantity = empty( $_POST['quantity'] ) ? 1 : apply_filters( 'woocommerce_stock_amount', $_POST['quantity'] ); $variation_id = $_POST['variation_id']; $cart_item_data = $_POST; unset( $cart_item_data['quantity'] ); $variation = array(); foreach ( $cart_item_data as $key => $value ) { if ( preg_match( "/^attribute*/", $key ) ) { $variation[ $key ] = $value; } } foreach ( $variation as $key => $value ) { $variation[ $key ] = stripslashes( $value ); } $passed_validation = apply_filters( 'woocommerce_add_to_cart_validation', true, $product_id, $quantity ); if ( $passed_validation && WC()->cart->add_to_cart( $product_id, $quantity, $variation_id, $variation, $cart_item_data ) ) { do_action( 'woocommerce_ajax_added_to_cart', $product_id ); if ( get_option( 'woocommerce_cart_redirect_after_add' ) == 'yes' ) { wc_add_to_cart_message( $product_id ); } global $woocommerce; $items = $woocommerce->cart->get_cart(); wc_setcookie( 'woocommerce_items_in_cart', count( $items ) ); wc_setcookie( 'woocommerce_cart_hash', md5( json_encode( $items ) ) ); do_action( 'woocommerce_set_cart_cookies', true ); // Return fragments WC_AJAX::get_refreshed_fragments(); } else { // If there was an error adding to the cart, redirect to the product page to show any errors $data = array( 'error' => true, 'product_url' => apply_filters( 'woocommerce_cart_redirect_after_error', get_permalink( $product_id ), $product_id ) ); wp_send_json_error( $data ); } } public function blog_search_result() { if ( ! is_search() || ! get_theme_mod( 'penci_woocommerce_search_included_posts', true ) ) { return; } $search_query = get_search_query(); $args = [ 'search_query' => $search_query ]; get_template_part( 'woocommerce/content', 'blog-search', $args ); } public function product_search_result() { if ( ! is_search() || ! apply_filters( 'penci_enable_product_post_search', false ) ) { return; } $search_query = get_search_query(); penci_elementor_products_template( [ 'search_query' => $search_query ] ); } } $penci_product_misc = new penci_product_misc;