init_hooks(); } /** * Gets the instance of the class */ public static function init(){ if ( null === self::$instance ){ self::$instance = new self(); } return self::$instance; } /** * Hook methods to WordPress * @return void */ function init_hooks() { $theme = wp_get_theme(); $version = isset( $theme['Version'] ) ? $theme['Version'] : false; // Bail if no theme version found if ( ! $version ) { return; } // Fixing quirks on shop module loop add_action( 'et_pb_shop_before_print_shop', array( $this, 'deregister_woocommerce_adjustments' ) ); add_action( 'et_pb_shop_after_print_shop', array( $this, 'reregister_woocommerce_adjustments' ) ); // Fixing styling quirks add_action( 'wp_enqueue_scripts', array( $this, 'add_styling_fix' ), 12 ); // Modify shop module's advanced options add_filter( 'et_pb_shop_advanced_options', array( $this, 'modify_shop_advanced_options' ), 10, 3 ); } /** * Deregister changes made by Foxy theme on WooCommerce commerce component inside shop module * @since 2.2.7 * @return void */ function deregister_woocommerce_adjustments() { add_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5 ); // Foxy overwrites woocommerce_template_loop_price() which causes shop module appearance to // be unexpected. Remove initial hook and replace it with compatibility hook which replicate // the original woocommerce_template_loop_price() content remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 ); add_action( 'woocommerce_after_shop_loop_item_title', array( $this, 'default_woocommerce_template_loop_price' ), 10 ); } /** * Re-register changes made by Foxy theme on WooCommerce commerce component after shop module is * done so it doesn't affect WooCommerce component outside shop module * @since 2.2.7 * @return void */ function reregister_woocommerce_adjustments() { remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5 ); // Deregister compatibility hook and re-register original hook to avoid WooCommerce output // outside shop module add_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 ); remove_action( 'woocommerce_after_shop_loop_item_title', array( $this, 'default_woocommerce_template_loop_price' ), 10 ); } /** * Provide default WooCommerce woocommerce_template_loop_price() which is overwritten by Foxy theme * @since 2.2.7 * @return void */ function default_woocommerce_template_loop_price() { if ( function_exists( 'wc_get_template') ) { wc_get_template( 'loop/price.php' ); } } /** * Modify shop module's advanced options configuration * @param array $options default toggle module option * @param string $slug module slug * @param string $main_css_element main css selector * @return array modified option */ function modify_shop_advanced_options( $options, $slug, $main_css_element ) { // Add important tag to shop module's title CSS $options['fonts']['title']['css']['important'] = array( 'size' ); return $options; } /** * Add inline styling for fixing design quirks on Foxy theme * @since 2.2.7 * @return void */ function add_styling_fix() { global $post; $is_fb = et_fb_enabled(); // Added styling adjustment for shop module $has_shop_module = isset( $post->post_content ) && has_shortcode( $post->post_content, 'et_pb_shop' ); if ( $has_shop_module || $is_fb ) { $shop_compat_style = ' #et-boc .et_pb_shop .woocommerce ul.products li.product { margin: 0 3.05% 2.992em 0 !important; width: 22.05% !important; } #et-boc .et_pb_shop .woocommerce.columns-1 ul.products li.product { width: 100% !important; margin-right: 0; } #et-boc .et_pb_shop .woocommerce.columns-2 ul.products li.product { width: 48% !important; margin: 0 2% 2.992em 0 !important; } #et-boc .et_pb_shop .woocommerce.columns-3 ul.products li.product { width: 30.75% !important; margin-right: 2.5% !important; } #et-boc .et_pb_shop .woocommerce.columns-4 ul.products li.product { margin-right: 2.9% !important; } #et-boc .et_pb_shop .woocommerce.columns-5 ul.products li.product { width: 16.95% !important; } #et-boc .woocommerce-page.columns-6 ul.products li.product, #et-boc .woocommerce.columns-6 ul.products li.product { width: 13.5% !important; margin: 0 3.8% 2.992em 0 !important; } #et-boc .et_pb_shop .onsale { right: auto !important; } #et-boc .et_pb_shop .woocommerce ul.products li.product h3 { font-size: 1em !important; padding: .3em 0 !important; } #et-boc .et_pb_shop .woocommerce ul.products li.product .star-rating { margin: 4px 0 0.7em 0 !important; } '; wp_add_inline_style( 'et-builder-modules-style', $shop_compat_style ); } // Added styling adjustment for comments module $has_comments_module = isset( $post->post_content ) && has_shortcode( $post->post_content, 'et_pb_comments' ); if ( $has_comments_module || $is_fb ) { $comments_compat_style = ' #et-boc .et_pb_comments_module .comment-body { padding: 40px 40px 90px; min-height: 110px; margin-bottom: 80px; background: white; } #et-boc .et_pb_comments_module .comment-reply-link.et_pb_button { bottom: -60px; top: auto; } #et-boc .et_pb_comments_module .testimonial-author { padding-left: 40px; } #et-boc .et_pb_comments_module .testimonial-author .et-avatar:before { box-shadow: none !important; } #et-boc .et_pb_comments_module .testimonial-author .et-avatar { padding: 5px; border-radius: 50%; box-shadow: 0 3px 3px rgba(0, 0, 0, 0.3); margin-right: 25px; background: white; } #et-boc .et_pb_comments_module .testimonial-author .avatar { border-radius: 50%; display: block; } #et-boc .et_pb_comments_module .testimonial-author strong { padding: 18px 0 0; } @media (max-width: 767px) { .et-db #et-boc #comment-wrap li.comment article { padding-right: 40px; } } '; wp_add_inline_style( 'et-builder-modules-style', $comments_compat_style ); } } } ET_Builder_Theme_Compat_Foxy::init();