You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
466 lines
12 KiB
466 lines
12 KiB
<?php
|
|
if ( ! defined( 'WOODMART_THEME_DIR' ) ) exit( 'No direct script access allowed' );
|
|
|
|
/**
|
|
* WOODMART_Layout Class set up layout settings
|
|
* for the current page when initializing
|
|
* based on theme options and custom metaboxes
|
|
*/
|
|
|
|
use XTS\Modules\Layouts\Main as Builder;
|
|
|
|
class WOODMART_Layout {
|
|
|
|
/**
|
|
* ID for the current page/post/product/project
|
|
* @var integer
|
|
*/
|
|
private $page_id = 0;
|
|
|
|
/**
|
|
* Sidebar name
|
|
* @var string
|
|
*/
|
|
private $sidebar_name = 'sidebar-1';
|
|
|
|
/**
|
|
* CSS bootstrap class for the content section
|
|
* @var string
|
|
*/
|
|
private $content_class = '';
|
|
|
|
/**
|
|
* Width of the content X/12
|
|
* @var integer
|
|
*/
|
|
private $content_col_width = 0;
|
|
|
|
/**
|
|
* CSS bootstrap class for the sidebar section
|
|
* @var string
|
|
*/
|
|
private $sidebar_class = '';
|
|
|
|
/**
|
|
* Width of the sidebar X/12
|
|
* @var integer
|
|
*/
|
|
private $sidebar_col_width = 0;
|
|
|
|
/**
|
|
* Sidebar position
|
|
* @var string
|
|
*/
|
|
private $page_layout = '';
|
|
|
|
/**
|
|
* Add wordpress actions
|
|
*
|
|
*/
|
|
public function __construct() {
|
|
|
|
if( is_admin() ) return;
|
|
|
|
add_action( 'wp', array($this, 'set_page_id'), 1);
|
|
|
|
add_action( 'wp', array($this, 'init'), 500);
|
|
}
|
|
|
|
/**
|
|
* Set page id
|
|
*
|
|
*/
|
|
public function set_page_id() {
|
|
|
|
$this->page_id = woodmart_get_the_ID( array( 'singulars' => array( 'product' ) ) );
|
|
|
|
}
|
|
|
|
/**
|
|
* Set up all properties
|
|
*
|
|
*/
|
|
public function init() {
|
|
|
|
//ar(woodmart_get_the_ID());
|
|
|
|
$this->_set_sidebar_name();
|
|
|
|
$this->_set_page_layout();
|
|
|
|
$this->_set_sidebar_col_width();
|
|
|
|
$this->_set_content_col_width();
|
|
|
|
$this->_set_sidebar_class();
|
|
|
|
$this->_set_content_class();
|
|
|
|
}
|
|
|
|
/**
|
|
* Set the name of sidebar
|
|
*
|
|
*/
|
|
private function _set_sidebar_name() {
|
|
$specific = '';
|
|
$page_id = $this->get_page_id();
|
|
|
|
if ( woodmart_woocommerce_installed() && ( is_product_taxonomy() || is_shop() || is_product_category() || is_product_tag() || woodmart_is_product_attribute_archive() || ( is_search() && isset( $_GET['post_type'] ) && 'product' === $_GET['post_type'] ) ) ) {
|
|
$this->sidebar_name = 'sidebar-shop';
|
|
} else if( is_singular( 'product' ) ) {
|
|
$this->sidebar_name = 'sidebar-product-single';
|
|
} else if ( is_singular( 'portfolio' ) || is_post_type_archive( 'portfolio' ) || is_tax( 'project-cat' ) ) {
|
|
$this->sidebar_name = 'portfolio-widgets-area';
|
|
}
|
|
|
|
if( $page_id != 0 ) {
|
|
$specific = get_post_meta( $page_id, '_woodmart_custom_sidebar', true );
|
|
}
|
|
|
|
if( $specific != '' && $specific !== 'none' ) {
|
|
$this->sidebar_name = $specific;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Get CSS class for the content DIV
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_content_class() {
|
|
return $this->content_class;
|
|
}
|
|
|
|
/**
|
|
* Set CSS class for the content DIV.
|
|
*/
|
|
private function _set_content_class() {
|
|
$cl = 'col-lg-';
|
|
$size = $this->get_content_col_width();
|
|
$layout = $this->get_page_layout();
|
|
|
|
$this->content_class = $cl . $size . ' col-12';
|
|
$this->content_class .= ( 'full-width' === $layout || 12 === $size ) ? ' col-md-12' : ' col-md-9';
|
|
|
|
if ( woodmart_woocommerce_installed() && ( is_checkout() || is_cart() ) ) {
|
|
$this->content_class .= woodmart_get_builder_status_class();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get content column width
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_content_col_width() {
|
|
return $this->content_col_width;
|
|
}
|
|
|
|
/**
|
|
* Set content column width
|
|
*
|
|
*/
|
|
private function _set_content_col_width() {
|
|
$sidebar_width = $this->get_sidebar_col_width();
|
|
$this->content_col_width = 12 - $sidebar_width;
|
|
}
|
|
|
|
/**
|
|
* Get CSS class for the sidebar DIV
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_sidebar_class() {
|
|
return $this->sidebar_class;
|
|
}
|
|
|
|
/**
|
|
* Set CSS class for the sidebar DIV
|
|
*
|
|
* @return string
|
|
*/
|
|
private function _set_sidebar_class() {
|
|
|
|
$cl = 'col-lg-';
|
|
$size = $this->get_sidebar_col_width();
|
|
$content_size = $this->get_content_col_width();
|
|
|
|
$this->sidebar_class = $cl . $size . ' col-md-3 col-12';
|
|
|
|
$layout = $this->get_page_layout();
|
|
|
|
if ( $layout == 'sidebar-left' ) {
|
|
$this->sidebar_class .= ' order-last order-md-first';
|
|
} elseif ( $layout == 'sidebar-right' ) {
|
|
$this->sidebar_class .= ' order-last';
|
|
}
|
|
|
|
if( ! strstr( $this->sidebar_class, 'col-lg-0' ) ) {
|
|
$this->sidebar_class .= ' ' . $layout;
|
|
}
|
|
|
|
if ( woodmart_woocommerce_installed() && is_product() ) {
|
|
$this->sidebar_class .= ' single-product-sidebar';
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Set content column width
|
|
*
|
|
* @return integer
|
|
*/
|
|
public function get_sidebar_col_width() {
|
|
return $this->sidebar_col_width;
|
|
}
|
|
|
|
/**
|
|
* Set sidebar column width
|
|
*
|
|
*/
|
|
private function _set_sidebar_col_width() {
|
|
|
|
$size = 2;
|
|
$specific = '';
|
|
|
|
// Set here page ID. Will be used to get custom value from metabox of specific PAGE | BLOG PAGE | SHOP PAGE.
|
|
$page_id = $this->get_page_id();
|
|
$this->sidebar_col_width = woodmart_get_opt( 'sidebar_width' );
|
|
|
|
if( $page_id != 0 ) {
|
|
$specific = get_post_meta( $page_id, '_woodmart_sidebar_width', true );
|
|
}
|
|
|
|
// Get specific sidebar size for Shop Page
|
|
if( woodmart_woocommerce_installed() && ( is_shop() || is_product_category() || is_product_tag() || woodmart_is_product_attribute_archive() || ( is_search() && isset( $_GET['post_type'] ) && 'product' === $_GET['post_type'] ) ) ) {
|
|
$this->sidebar_col_width = woodmart_get_opt( 'shop_sidebar_width' );
|
|
} else if(is_singular( 'product' )) {
|
|
// Get specific layout for SINGLE PRODUCT PAGE
|
|
$this->sidebar_col_width = woodmart_get_opt( 'single_sidebar_width' );
|
|
} else if( is_home() || is_singular( 'post' ) || is_archive() ) {
|
|
// Get specific sidebar size for Blog Page
|
|
$this->sidebar_col_width = woodmart_get_opt( 'blog_sidebar_width' );
|
|
} elseif ( is_singular( 'woodmart_layout' ) ) {
|
|
$this->sidebar_col_width = 0;
|
|
}
|
|
|
|
if( $specific != '' && $specific != 'default' ) {
|
|
// Set specific sidebar size FOR THIS PAGE
|
|
$this->sidebar_col_width = $specific;
|
|
}
|
|
// Remove theme sidebar for dokan store list page
|
|
|
|
if( function_exists( 'dokan_is_store_page' ) && dokan_is_store_page() ) {
|
|
$this->sidebar_col_width = 0;
|
|
}
|
|
|
|
$layout = $this->get_page_layout();
|
|
|
|
// Remove sidebar if it has no widgets
|
|
$sidebar_name = $this->get_sidebar_name();
|
|
|
|
if ( ! is_active_sidebar( $sidebar_name ) && $sidebar_name != 'sidebar-product-single' ) {
|
|
$this->sidebar_col_width = 0;
|
|
}
|
|
|
|
if( $layout == 'full-width' ) {
|
|
$this->sidebar_col_width = 0;
|
|
}
|
|
|
|
if(empty($this->sidebar_col_width)) {
|
|
$this->sidebar_col_width = 0;
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Get page layout (sidebar position)
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_page_layout() {
|
|
return apply_filters( 'woodmart_get_page_layout', $this->page_layout );
|
|
}
|
|
|
|
/**
|
|
* Set page layout (sidebar position)
|
|
*
|
|
*/
|
|
private function _set_page_layout() {
|
|
global $post, $WCMp;
|
|
|
|
$specific = '';
|
|
|
|
// Set here page ID. Will be used to get custom value from metabox of specific PAGE | BLOG PAGE | SHOP PAGE.
|
|
$page_id = $this->get_page_id();
|
|
|
|
$this->page_layout = 'sidebar-right';
|
|
$this->page_layout = woodmart_get_opt( 'main_layout' );
|
|
|
|
if ( ( is_singular( 'portfolio' ) || is_post_type_archive( 'portfolio' ) || is_tax( 'project-cat' ) ) && ! is_active_sidebar( 'portfolio-widgets-area' ) ) {
|
|
$this->page_layout = 'full-width';
|
|
}
|
|
|
|
if( $page_id != 0 ) {
|
|
$specific = get_post_meta( $page_id, '_woodmart_main_layout', true );
|
|
}
|
|
|
|
if ( woodmart_woocommerce_installed() && ( is_shop() || is_product_category() || is_product_tag() || woodmart_is_product_attribute_archive() || ( is_search() && isset( $_GET['post_type'] ) && 'product' === $_GET['post_type'] ) ) ) {
|
|
// Get specific layout for Shop Page
|
|
$this->page_layout = woodmart_get_opt( 'shop_layout' );
|
|
} else if( $this->is_account_pages() ) {
|
|
$this->page_layout = 'full-width';
|
|
} else if( is_singular( 'product' ) ) {
|
|
// Get specific layout for SINGLE PRODUCT PAGE
|
|
$this->page_layout = woodmart_get_opt( 'single_product_layout' );
|
|
} else if( isset( $WCMp ) && is_tax( $WCMp->taxonomy->taxonomy_name ) ) {
|
|
$this->page_layout = woodmart_get_opt( 'blog_layout' );
|
|
} else if( is_singular( 'post' ) || woodmart_is_blog_archive() ) {
|
|
// Get specific layout for Blog Page
|
|
$this->page_layout = woodmart_get_opt( 'blog_layout' );
|
|
|
|
// Disable sidebar if blog design is Masonry Grid
|
|
if( woodmart_get_opt( 'blog_design' ) == 'masonry' && ! is_singular( 'post' ) ) {
|
|
$this->page_layout = 'full-width';
|
|
}
|
|
}
|
|
|
|
if( $specific != '' && $specific != 'default' ) {
|
|
// Set specific layout FOR THIS PAGE
|
|
$this->page_layout = $specific;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check if it is account page
|
|
*
|
|
* @return boolean
|
|
*/
|
|
public function is_account_page() {
|
|
if( function_exists( 'is_account_page' ) ) {
|
|
return is_account_page();
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check if it is some account pages
|
|
*
|
|
* @return boolean
|
|
*/
|
|
public function is_account_pages() {
|
|
$wishlist_page_id = woodmart_get_opt( 'wishlist_page' );
|
|
|
|
if( function_exists( 'is_account_page' ) ) {
|
|
if( is_account_page() ) return true;
|
|
}
|
|
|
|
if( $this->get_page_id() == $wishlist_page_id ) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
|
|
/**
|
|
* Class for page content container
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public function get_main_container_class() {
|
|
$class = 'container';
|
|
$is_product_builder = Builder::get_instance()->has_custom_layout( 'single_product' );
|
|
|
|
// Different class for product page
|
|
if( woodmart_woocommerce_installed() && is_singular( 'product' ) && !get_query_var( 'edit' ) && ( ( function_exists( 'woodmart_elementor_has_location' ) && ! woodmart_elementor_has_location( 'single' ) ) || ! function_exists( 'woodmart_elementor_has_location' ) ) ) {
|
|
$class = 'container-fluid';
|
|
|
|
if ( $is_product_builder && 'enabled' === woodmart_get_opt( 'negative_gap' ) ) {
|
|
$class = 'container';
|
|
} elseif ( $is_product_builder && 'disabled' === woodmart_get_opt( 'negative_gap' ) ) {
|
|
$class = 'container-fluid';
|
|
}
|
|
}
|
|
|
|
if ( ( woodmart_get_portfolio_page_id() == woodmart_page_ID() ) && woodmart_get_opt( 'portfolio_full_width' ) ) {
|
|
$class = 'container-fluid container-no-gutters';
|
|
}
|
|
|
|
if ( woodmart_is_elementor_full_width() ) {
|
|
$class = 'container-fluid container-no-gutters';
|
|
}
|
|
|
|
return apply_filters( 'woodmart_main_content_classes', $class );
|
|
}
|
|
|
|
/**
|
|
* Gets the value of page_id.
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public function get_page_id() {
|
|
return $this->page_id;
|
|
}
|
|
|
|
/**
|
|
* Gets the value of sidebar_name.
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public function get_sidebar_name() {
|
|
return apply_filters( 'woodmart_get_sidebar_name', $this->sidebar_name );
|
|
}
|
|
|
|
}
|
|
|
|
if( ! function_exists( 'woodmart_page_ID' ) ) {
|
|
function woodmart_page_ID() {
|
|
return WOODMART_Registry()->layout->get_page_id();
|
|
}
|
|
}
|
|
|
|
if( ! function_exists( 'woodmart_get_content_class' ) ) {
|
|
function woodmart_get_content_class() {
|
|
return WOODMART_Registry()->layout->get_content_class();
|
|
}
|
|
}
|
|
|
|
if( ! function_exists( 'woodmart_get_content_col_width' ) ) {
|
|
function woodmart_get_content_col_width() {
|
|
return WOODMART_Registry()->layout->get_content_col_width();
|
|
}
|
|
}
|
|
|
|
if( ! function_exists( 'woodmart_get_sidebar_class' ) ) {
|
|
function woodmart_get_sidebar_class() {
|
|
return WOODMART_Registry()->layout->get_sidebar_class();
|
|
}
|
|
}
|
|
|
|
if( ! function_exists( 'woodmart_get_page_layout' ) ) {
|
|
function woodmart_get_page_layout() {
|
|
return WOODMART_Registry()->layout->get_page_layout();
|
|
}
|
|
}
|
|
|
|
if( ! function_exists( 'woodmart_get_sidebar_col_width' ) ) {
|
|
function woodmart_get_sidebar_col_width() {
|
|
return WOODMART_Registry()->layout->get_sidebar_col_width();
|
|
}
|
|
}
|
|
|
|
if( ! function_exists( 'woodmart_get_sidebar_name' ) ) {
|
|
function woodmart_get_sidebar_name() {
|
|
return WOODMART_Registry()->layout->get_sidebar_name();
|
|
}
|
|
}
|
|
|
|
if( ! function_exists( 'woodmart_get_main_container_class' ) ) {
|
|
function woodmart_get_main_container_class() {
|
|
return WOODMART_Registry()->layout->get_main_container_class();
|
|
}
|
|
}
|
|
|