'hoot-woocommerce-sidebar', 'name' => _x( 'Woocommerce Primary Sidebar', 'sidebar', 'dollah' ), 'description' => __( 'The primary sidebar for woocommerce pages.', 'dollah' ) ) ); hybrid_register_sidebar( array( 'id' => 'hoot-woocommerce-sidebar-secondary', 'name' => _x( 'Woocommerce Secondary Sidebar', 'sidebar', 'dollah' ), 'description' => __( 'The secondary sidebar for woocommerce pages (if you are using a 3 column layout with 2 sidebars).', 'dollah' ) ) ); } add_action( 'widgets_init', 'dollah_woo_register_sidebars' ); /** * Add woocommerce sidebar class. * * @since 1.0 * @access public * @param array $attr * @param string $context * @return array */ function dollah_theme_woo_attr_sidebar( $attr, $context ) { if ( !empty( $context ) && ( $context == 'primary' || $context == 'secondary' ) ) { if ( is_woocommerce() || is_cart() || is_checkout() || is_account_page() ) { $attr['class'] = ( empty( $attr['class'] ) ) ? '' : $attr['class']; $attr['class'] .= " woocommerce-sidebar woocommerce-sidebar-{$context}"; } } return $attr; } add_filter( 'hybrid_attr_sidebar', 'dollah_theme_woo_attr_sidebar', 11, 2 ); /** * Apply sidebar layout for woocommerce pages * * @since 1.0 * @access public * @param string $sidebar * @return array */ function dollah_woo_main_layout( $sidebar ) { // Check for pages which use WooCommerce templates (cart and checkout are standard 'Pages' with shortcodes and thus are not included) if ( is_woocommerce() ){ if ( is_product() ) { // single product page. Wrapper for is_singular $sidebar = dollah_get_mod( 'sidebar_wooproduct' ); } else { // shop, category, tag archives etc $sidebar = dollah_get_mod( 'sidebar_wooshop' ); } } // Let developers edit default layout for Cart and Checkout which are standard 'Pages' with shortcodes $forcenosidebar = apply_filters( 'dollah_woo_pages_force_nosidebar', true ); if ( $forcenosidebar && ( is_cart() || is_checkout() || is_account_page() ) ) { $sidebar = 'none'; } return $sidebar; } add_filter( 'dollah_main_layout', 'dollah_woo_main_layout' ); /** * Do not show meta info for Products or WooPages (Account, Cart, Checkout) * * @since 1.0 * @access public * @param array $display * @param string $context */ if ( !function_exists('dollah_woo_meta_info_blocks_display') ) { function dollah_woo_meta_info_blocks_display( $display, $context ) { if ( is_woocommerce() || is_cart() || is_checkout() || is_account_page() ) $display = array(); return $display; } } add_filter( 'dollah_meta_info_blocks_display', 'dollah_woo_meta_info_blocks_display', 10, 2 ); /** * Change product # displayed on shop page * * @since 1.0 * @access public * @param int $value * @return int */ if ( !function_exists('dollah_woo_loop_per_page') ) { function dollah_woo_loop_per_page( $value ) { return intval( dollah_get_mod( 'wooshop_products' ) ); } } add_filter( 'loop_shop_per_page', 'dollah_woo_loop_per_page', 20 ); /** * Override theme default specification for product # per row * * @since 1.0 * @access public * @param int $value * @return int */ if ( !function_exists('dollah_woo_loop_columns') ) { function dollah_woo_loop_columns( $value ) { return intval( dollah_get_mod( 'wooshop_product_columns' ) ); } } add_filter( 'loop_shop_columns', 'dollah_woo_loop_columns', 999 ); /** * Add inline style if product # per row is different * * @since 1.0 * @access public * @return void */ if ( !function_exists('dollah_woo_custom_loop_columns_css') ) { function dollah_woo_custom_loop_columns_css() { $columns = dollah_get_mod( 'wooshop_product_columns' ); if ( $columns == 4 ) return; switch ( $columns ) { case '2': $css = '.woocommerce.archive ul.products li.product, .woocommerce-page.archive ul.products li.product { width: 48.1%; }'; // only on shop page break; case '3': $css = '.woocommerce.archive ul.products li.product, .woocommerce-page.archive ul.products li.product { width: 30.8%; }'; // only on shop page break; case '5': $css = '.woocommerce.archive ul.products li.product, .woocommerce-page.archive ul.products li.product { width: 16.96%; }'; // only on shop page break; } if ( !empty( $css ) ) { $handle = ( is_child_theme() ) ? 'hybridextend-template-style' : 'hybridextend-style'; wp_add_inline_style( $handle, $css ); } } } add_action( 'wp_enqueue_scripts', 'dollah_woo_custom_loop_columns_css', 99 ); /** * Bug fix for Woocommerce in some installations (on posts/products singular) * WC_Query hooks into pre_get_posts (@priority 10) and checks for `isset( $q->queried_object->ID )` * in woocommerce\includes\class=wc-query.php at line#215. This gives suppressed error * "Notice: Undefined property: WP_Query::$queried_object in \wp-includes\query.php on line 3960" * Note that class WP_Query (\includes\query.php) does unset($this->queried_object); in WP_Query::init() * * The proper way to chck queried object is `get_queried_object()` and not $q->queried_object * So we set $q->queried_object by running get_queried_object() at pre_get_posts @priority 9 * * @since 1.0 * @access public * @return void */ function dollah_woo_set_queried_object( $q ){ if ( $q->is_main_query() ) $r = get_queried_object(); } add_action( 'pre_get_posts', 'dollah_woo_set_queried_object', 9 ); /** * Hide title area on single product page * * @since 1.0 * @access public * @return void */ if ( !function_exists( 'dollah_hide_loop_meta_woo_product' ) ) : function dollah_hide_loop_meta_woo_product() { return ''; // return 'hide' to hide the title on single product pages } endif;