'hoot-woocommerce-sidebar',
'name' => _x( 'Woocommerce Primary Sidebar', 'sidebar', 'magazine-hoot' ),
'description' => __( 'The primary sidebar for woocommerce pages.', 'magazine-hoot' ),
'before_title' => '
',
)
);
hybrid_register_sidebar(
array(
'id' => 'hoot-woocommerce-sidebar-secondary',
'name' => _x( 'Woocommerce Secondary Sidebar', 'sidebar', 'magazine-hoot' ),
'description' => __( 'The secondary sidebar for woocommerce pages (if you are using a 3 column layout with 2 sidebars).', 'magazine-hoot' ),
'before_title' => '',
)
);
}
add_action( 'widgets_init', 'maghoot_woo_register_sidebars' );
/**
* Add woocommerce sidebar class.
*
* @since 1.0
* @access public
* @param array $attr
* @param string $context
* @return array
*/
function maghoot_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', 'maghoot_theme_woo_attr_sidebar', 11, 2 );
/**
* Apply sidebar layout for woocommerce pages
*
* @since 1.0
* @access public
* @param string $sidebar
* @return array
*/
function maghoot_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 = maghoot_get_mod( 'sidebar_wooproduct' );
} else { // shop, category, tag archives etc
$sidebar = maghoot_get_mod( 'sidebar_wooshop' );
}
}
// Let developers edit default layout for Cart and Checkout which are standard 'Pages' with shortcodes
$forcenosidebar = apply_filters( 'maghoot_woo_pages_force_nosidebar', true );
if ( $forcenosidebar && ( is_cart() || is_checkout() || is_account_page() ) ) {
$sidebar = 'none';
}
return $sidebar;
}
add_filter( 'maghoot_main_layout', 'maghoot_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('maghoot_woo_meta_info_blocks_display') ) {
function maghoot_woo_meta_info_blocks_display( $display, $context ) {
if ( is_woocommerce() || is_cart() || is_checkout() || is_account_page() )
$display = array();
return $display;
}
}
add_filter( 'maghoot_meta_info_blocks_display', 'maghoot_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('maghoot_woo_loop_per_page') ) {
function maghoot_woo_loop_per_page( $value ) {
return intval( maghoot_get_mod( 'wooshop_products' ) );
}
}
add_filter( 'loop_shop_per_page', 'maghoot_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('maghoot_woo_loop_columns') ) {
function maghoot_woo_loop_columns( $value ) {
return intval( maghoot_get_mod( 'wooshop_product_columns' ) );
}
}
add_filter( 'loop_shop_columns', 'maghoot_woo_loop_columns', 999 );
/**
* Add inline style if product # per row is different
*
* @since 1.0
* @access public
* @return void
*/
if ( !function_exists('maghoot_woo_custom_loop_columns_css') ) {
function maghoot_woo_custom_loop_columns_css() {
$columns = maghoot_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', 'maghoot_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 maghoot_woo_set_queried_object( $q ){
if ( $q->is_main_query() )
$r = get_queried_object();
}
add_action( 'pre_get_posts', 'maghoot_woo_set_queried_object', 9 );
/**
* Hide title area on single product page
*
* @since 1.0
* @access public
* @return void
*/
if ( !function_exists( 'maghoot_hide_loop_meta_woo_product' ) ) :
function maghoot_hide_loop_meta_woo_product() {
return ''; // return 'hide' to hide the title on single product pages
}
endif;