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.
426 lines
11 KiB
426 lines
11 KiB
<?php
|
|
if ( ! defined( 'WOODMART_THEME_DIR' ) ) {
|
|
exit( 'No direct script access allowed' );
|
|
}
|
|
|
|
/**
|
|
* Page css files.
|
|
*/
|
|
class WOODMART_Pagecssfiles {
|
|
/**
|
|
* Inline enqueue styles.
|
|
*
|
|
* @var array
|
|
*/
|
|
private $inline_enqueue_styles = array();
|
|
/**
|
|
* Inline enqueue styles.
|
|
*
|
|
* @var array
|
|
*/
|
|
private $inline_enqueue_styles_mobile = array();
|
|
/**
|
|
* Options save.
|
|
*
|
|
* @var array
|
|
*/
|
|
private $options_save = array(
|
|
'404',
|
|
'search',
|
|
'date',
|
|
'author',
|
|
);
|
|
/**
|
|
* Theme version.
|
|
*
|
|
* @var string
|
|
*/
|
|
private $theme_version;
|
|
/**
|
|
* Is mobile.
|
|
*
|
|
* @var string
|
|
*/
|
|
private $is_mobile;
|
|
/**
|
|
* Page data.
|
|
*
|
|
* @var array
|
|
*/
|
|
private $page_data = array();
|
|
/**
|
|
* Page css files.
|
|
*
|
|
* @var array
|
|
*/
|
|
private $page_css_files = array();
|
|
|
|
/**
|
|
* Constructor.
|
|
*/
|
|
public function __construct() {
|
|
$this->theme_version = woodmart_get_theme_info( 'Version' );
|
|
$this->is_mobile = wp_is_mobile() && woodmart_get_opt( 'mobile_optimization', 0 );
|
|
$this->hooks();
|
|
}
|
|
|
|
/**
|
|
* Hooks.
|
|
*/
|
|
public function hooks() {
|
|
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_page_css_files' ), 10100 );
|
|
add_action( 'wp_footer', array( $this, 'save_page_css_files' ), 10000 );
|
|
add_action( 'save_post', array( $this, 'delete_post_meta' ), 10 );
|
|
add_action( 'saved_term', array( $this, 'delete_term_meta' ), 10 );
|
|
add_action( 'save_post_cms_block', array( $this, 'delete_all_meta' ), 10 );
|
|
add_action( 'save_post_woodmart_slider', array( $this, 'delete_all_meta' ), 10 );
|
|
add_action( 'xts_theme_settings_save', array( $this, 'delete_all_meta' ), 10 );
|
|
add_action( 'activated_plugin', array( $this, 'delete_all_meta' ), 10 );
|
|
add_action( 'deactivated_plugin', array( $this, 'delete_all_meta' ), 10 );
|
|
add_action( 'wp', array( $this, 'set_page_data' ), 10 );
|
|
add_action( 'wp', array( $this, 'set_page_css_files' ), 20 );
|
|
|
|
add_action( 'woocommerce_single_product_summary', 'woodmart_page_css_files_disable', 59 );
|
|
add_action( 'woocommerce_single_product_summary', 'woodmart_page_css_files_enable', 61 );
|
|
}
|
|
|
|
/**
|
|
* Set page data.
|
|
*/
|
|
public function set_page_data() {
|
|
$this->page_data = $this->get_page_data();
|
|
}
|
|
|
|
/**
|
|
* Set page data.
|
|
*/
|
|
public function set_page_css_files() {
|
|
$this->page_css_files = $this->get_page_css_files();
|
|
}
|
|
|
|
/**
|
|
* Delete all saved meta.
|
|
*/
|
|
public function delete_all_meta() {
|
|
global $wpdb;
|
|
|
|
$wpdb->delete( $wpdb->prefix . 'postmeta', array( 'meta_key' => 'wd_page_css_files' ) ); // phpcs:ignore
|
|
$wpdb->delete( $wpdb->prefix . 'postmeta', array( 'meta_key' => 'wd_page_css_files_mobile' ) ); // phpcs:ignore
|
|
$wpdb->delete( $wpdb->prefix . 'termmeta', array( 'meta_key' => 'wd_page_css_files' ) ); // phpcs:ignore
|
|
|
|
foreach ( $this->options_save as $option ) {
|
|
delete_option( 'wd_page_css_files_' . $option );
|
|
}
|
|
|
|
wp_cache_flush();
|
|
}
|
|
|
|
/**
|
|
* Delete post meta.
|
|
*
|
|
* @param integer $post_id Post id.
|
|
*/
|
|
public function delete_post_meta( $post_id ) {
|
|
delete_post_meta( $post_id, 'wd_page_css_files' );
|
|
delete_post_meta( $post_id, 'wd_page_css_files_mobile' );
|
|
}
|
|
|
|
/**
|
|
* Delete term meta.
|
|
*
|
|
* @param integer $term_id Term id.
|
|
*/
|
|
public function delete_term_meta( $term_id ) {
|
|
delete_term_meta( $term_id, 'wd_page_css_files' );
|
|
}
|
|
|
|
/**
|
|
* Get current page data.
|
|
*
|
|
* @return array|string[]
|
|
*/
|
|
private function get_page_data() {
|
|
$data = array(
|
|
'type' => '',
|
|
'id' => '',
|
|
);
|
|
|
|
$queried_object = get_queried_object();
|
|
|
|
if ( get_the_ID() ) {
|
|
$data = array(
|
|
'type' => 'post',
|
|
'id' => get_the_ID(),
|
|
);
|
|
}
|
|
if ( is_singular() ) {
|
|
$data = array(
|
|
'type' => 'post',
|
|
'id' => get_queried_object_id(),
|
|
);
|
|
}
|
|
if ( $queried_object && ( is_tag() || is_category() ) ) {
|
|
$data = array(
|
|
'type' => 'taxonomy',
|
|
'id' => $queried_object->term_id,
|
|
);
|
|
}
|
|
if ( woodmart_woocommerce_installed() && $queried_object && ( is_product_tag() || is_product_category() || woodmart_is_product_attribute_archive() ) ) {
|
|
$data = array(
|
|
'type' => 'taxonomy',
|
|
'id' => $queried_object->term_id,
|
|
);
|
|
}
|
|
if ( is_archive() && 'portfolio' === get_post_type() ) {
|
|
$data = array(
|
|
'type' => 'post',
|
|
'id' => woodmart_get_portfolio_page_id(),
|
|
);
|
|
}
|
|
if ( woodmart_woocommerce_installed() && is_shop() ) {
|
|
$data = array(
|
|
'type' => 'post',
|
|
'id' => get_option( 'woocommerce_shop_page_id' ),
|
|
);
|
|
}
|
|
if ( is_home() ) {
|
|
$data = array(
|
|
'type' => 'post',
|
|
'id' => get_option( 'page_for_posts' ),
|
|
);
|
|
}
|
|
if ( is_page() ) {
|
|
$data = array(
|
|
'type' => 'post',
|
|
'id' => get_queried_object_id(),
|
|
);
|
|
}
|
|
if ( is_search() ) {
|
|
$data = array(
|
|
'type' => 'search',
|
|
'id' => '',
|
|
);
|
|
}
|
|
if ( is_404() ) {
|
|
$data = array(
|
|
'type' => '404',
|
|
'id' => '',
|
|
);
|
|
}
|
|
if ( is_date() ) {
|
|
$data = array(
|
|
'type' => 'date',
|
|
'id' => '',
|
|
);
|
|
}
|
|
if ( is_author() ) {
|
|
$data = array(
|
|
'type' => 'author',
|
|
'id' => '',
|
|
);
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* Get page css files.
|
|
*
|
|
* @return array|false|mixed|void
|
|
*/
|
|
private function get_page_css_files() {
|
|
$data = $this->page_data;
|
|
|
|
if ( woodmart_is_woo_ajax() ) {
|
|
return array();
|
|
}
|
|
|
|
if ( get_option( 'wd_page_css_files_theme_version' ) !== $this->theme_version ) {
|
|
$this->delete_all_meta();
|
|
}
|
|
|
|
$files = array();
|
|
|
|
if ( 'post' === $data['type'] ) {
|
|
if ( $this->is_mobile && get_post_meta( $data['id'], '_woodmart_mobile_content', true ) ) {
|
|
$meta = get_post_meta( $data['id'], 'wd_page_css_files_mobile', true );
|
|
} else {
|
|
$meta = get_post_meta( $data['id'], 'wd_page_css_files', true );
|
|
}
|
|
} elseif ( 'taxonomy' === $data['type'] ) {
|
|
$meta = get_term_meta( $data['id'], 'wd_page_css_files', true );
|
|
} elseif ( in_array( $data['type'], array( 'search', '404', 'date', 'author' ), true ) ) {
|
|
$files = get_option( 'wd_page_css_files_' . $data['type'], array() );
|
|
}
|
|
|
|
if ( isset( $meta ) && $meta ) {
|
|
$files = $meta;
|
|
}
|
|
|
|
return $files;
|
|
}
|
|
|
|
/**
|
|
* Enqueue page css files.
|
|
*/
|
|
public function enqueue_page_css_files() {
|
|
$config = woodmart_get_config( 'css-files' );
|
|
$version = woodmart_get_theme_info( 'Version' );
|
|
$page_files = $this->page_css_files;
|
|
$localize = array();
|
|
|
|
if ( woodmart_is_combined_needed( 'combined_css' ) || ! $page_files ) {
|
|
wp_localize_script( 'woodmart-theme', 'woodmart_page_css', array() );
|
|
|
|
return;
|
|
}
|
|
|
|
foreach ( $page_files as $slug ) {
|
|
if ( ! isset( $config[ $slug ] ) ) {
|
|
continue;
|
|
}
|
|
|
|
foreach ( $config[ $slug ] as $file ) {
|
|
if ( isset( $file['wpb_file'] ) && 'wpb' === woodmart_get_current_page_builder() ) {
|
|
$file['file'] = $file['wpb_file'];
|
|
}
|
|
|
|
if ( is_rtl() && isset( $file['rtl'] ) ) {
|
|
$file['file'] = $file['file'] . '-rtl';
|
|
}
|
|
|
|
$src = WOODMART_THEME_DIR . $file['file'] . '.min.css';
|
|
|
|
$localize[ 'wd-' . $file['name'] . '-css' ] = $src;
|
|
|
|
wp_enqueue_style( 'wd-' . $file['name'], $src, array( 'woodmart-style' ), $version );
|
|
}
|
|
}
|
|
|
|
wp_localize_script( 'woodmart-theme', 'woodmart_page_css', $localize );
|
|
}
|
|
|
|
/**
|
|
* Enqueue page css files.
|
|
*
|
|
* @param string $key File slug.
|
|
*/
|
|
public function enqueue_style( $key, $ignore_combined = false ) {
|
|
$config = woodmart_get_config( 'css-files' );
|
|
$version = woodmart_get_theme_info( 'Version' );
|
|
$styles_not_use = woodmart_get_opt( 'styles_not_use' );
|
|
|
|
if ( woodmart_is_combined_needed( 'combined_css' ) && ! $ignore_combined || ! isset( $config[ $key ] ) ) {
|
|
return;
|
|
}
|
|
|
|
foreach ( $config[ $key ] as $file ) {
|
|
if ( is_array( $styles_not_use ) && in_array( $file['name'], $styles_not_use ) ) {
|
|
continue;
|
|
}
|
|
|
|
if ( isset( $file['wpb_file'] ) && 'wpb' === woodmart_get_current_page_builder() ) {
|
|
$file['file'] = $file['wpb_file'];
|
|
}
|
|
|
|
if ( is_rtl() && isset( $file['rtl'] ) ) {
|
|
$file['file'] = $file['file'] . '-rtl';
|
|
}
|
|
|
|
$src = WOODMART_THEME_DIR . $file['file'] . '.min.css';
|
|
|
|
if ( $this->is_mobile ) {
|
|
$this->inline_enqueue_styles_mobile[] = $file['name'];
|
|
} else {
|
|
$this->inline_enqueue_styles[] = $file['name'];
|
|
}
|
|
|
|
wp_enqueue_style( 'wd-' . $file['name'], $src, array( 'woodmart-style' ), $version );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Save page css files.
|
|
*/
|
|
public function save_page_css_files() {
|
|
$data = $this->page_data;
|
|
|
|
if ( $this->page_css_files || ! $this->inline_enqueue_styles ) {
|
|
return;
|
|
}
|
|
|
|
if ( isset( $data['type'] ) && 'post' === $data['type'] ) {
|
|
if ( $this->is_mobile && get_post_meta( $data['id'], '_woodmart_mobile_content', true ) ) {
|
|
update_post_meta( $data['id'], 'wd_page_css_files_mobile', $this->inline_enqueue_styles_mobile );
|
|
} else {
|
|
update_post_meta( $data['id'], 'wd_page_css_files', $this->inline_enqueue_styles );
|
|
}
|
|
} elseif ( isset( $data['type'] ) && 'taxonomy' === $data['type'] ) {
|
|
update_term_meta( $data['id'], 'wd_page_css_files', $this->inline_enqueue_styles );
|
|
} elseif ( isset( $data['type'] ) && in_array(
|
|
$data['type'],
|
|
array(
|
|
'search',
|
|
'404',
|
|
'date',
|
|
'author',
|
|
),
|
|
true
|
|
) ) {
|
|
update_option( 'wd_page_css_files_' . $data['type'], $this->inline_enqueue_styles );
|
|
}
|
|
|
|
update_option( 'wd_page_css_files_theme_version', $this->theme_version );
|
|
}
|
|
|
|
/**
|
|
* Enqueue inline style by key.
|
|
*
|
|
* @param string $key File slug.
|
|
*/
|
|
public function enqueue_inline_style( $key, $ignore_combined = false ) {
|
|
$config = woodmart_get_config( 'css-files' );
|
|
$page_files = $this->page_css_files;
|
|
$styles_not_use = woodmart_get_opt( 'styles_not_use' );
|
|
|
|
if ( ! isset( $config[ $key ] ) || in_array( $key, $page_files, true ) || ( woodmart_is_combined_needed( 'combined_css' ) && ! $ignore_combined ) || isset( $GLOBALS['wd_page_css_ignore'] ) ) {
|
|
return;
|
|
}
|
|
|
|
foreach ( $config[ $key ] as $data ) {
|
|
if ( $this->is_mobile ) {
|
|
if ( is_array( $this->inline_enqueue_styles_mobile ) && in_array( $data['name'], $this->inline_enqueue_styles_mobile ) ) { // phpcs:ignore
|
|
continue;
|
|
}
|
|
} else {
|
|
if ( is_array( $this->inline_enqueue_styles ) && in_array( $data['name'], $this->inline_enqueue_styles ) ) { // phpcs:ignore
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if ( is_array( $styles_not_use ) && in_array( $data['name'], $styles_not_use ) ) {
|
|
continue;
|
|
}
|
|
|
|
if ( isset( $data['wpb_file'] ) && 'wpb' === woodmart_get_current_page_builder() ) {
|
|
$data['file'] = $data['wpb_file'];
|
|
}
|
|
|
|
if ( is_rtl() && isset( $data['rtl'] ) ) {
|
|
$data['file'] = $data['file'] . '-rtl';
|
|
}
|
|
|
|
$src = WOODMART_THEME_DIR . $data['file'] . '.min.css';
|
|
|
|
if ( $this->is_mobile ) {
|
|
$this->inline_enqueue_styles_mobile[] = $data['name'];
|
|
} else {
|
|
$this->inline_enqueue_styles[] = $data['name'];
|
|
}
|
|
|
|
?>
|
|
<link rel="stylesheet" id="<?php echo esc_attr( 'wd-' . $data['name'] ); ?>-css" href="<?php echo esc_attr( $src ); ?>?ver=<?php echo esc_attr( $this->theme_version ); ?>" type="text/css" media="all" /> <?php // phpcs:ignore ?>
|
|
<?php
|
|
}
|
|
}
|
|
}
|
|
|