334 lines
9.3 KiB
PHP
334 lines
9.3 KiB
PHP
|
<?php
|
||
|
|
||
|
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
||
|
|
||
|
/**
|
||
|
* Gets plugin's absolute directory path.
|
||
|
*
|
||
|
* @param string $path Relative path
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
function stratum_get_plugin_path( $path = '' ) {
|
||
|
return STRATUM_PLUGIN_DIR . trim( $path, '/' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Gets plugin's URL.
|
||
|
*
|
||
|
* @param string $path
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
function stratum_get_plugin_url( $path = '' ) {
|
||
|
return plugins_url( $path, STRATUM_PLUGIN_FILE );
|
||
|
}
|
||
|
|
||
|
//Check if this Elementor page
|
||
|
function stratum_is_elementor($id = '') {
|
||
|
global $post;
|
||
|
|
||
|
if (!empty($id)) {
|
||
|
return \Elementor\Plugin::$instance->documents->get($id)->is_built_with_elementor();
|
||
|
} else {
|
||
|
return \Elementor\Plugin::$instance->documents->get($post->ID)->is_built_with_elementor();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function stratum_generate_swiper_options($settings = []){
|
||
|
|
||
|
if (empty($settings)) return;
|
||
|
|
||
|
extract( shortcode_atts( array(
|
||
|
//Swiper
|
||
|
'columns_count' => '1',
|
||
|
'slides_in_columns' => '1',
|
||
|
'slides_to_scroll' => '1',
|
||
|
'slider_direction' => 'horizontal',
|
||
|
'auto_height' => '',
|
||
|
'navigation' => 'both',
|
||
|
'pagination_style' => 'bullets',
|
||
|
'dynamic_bullets' => '',
|
||
|
'keyboard_control' => '',
|
||
|
'mousewheel_control' => '',
|
||
|
'item_center' => '',
|
||
|
'spacing_slides' => '',
|
||
|
'free_mode' => '',
|
||
|
'slide_effects' => 'slide',
|
||
|
'autoplay' => '',
|
||
|
'autoplay_speed' => '',
|
||
|
'pause_on_hover' => 'yes',
|
||
|
'loop' => '',
|
||
|
'animation_speed' => '',
|
||
|
'simulate_touch' => '',
|
||
|
//--Swiper
|
||
|
|
||
|
//Extra options
|
||
|
'slide_text_animation_delay' => 500,
|
||
|
'coverflow_visible' => '',
|
||
|
|
||
|
//Responsive
|
||
|
'columns_count_tablet' => '',
|
||
|
'columns_count_mobile' => '',
|
||
|
|
||
|
'slides_in_columns_tablet' => '',
|
||
|
'slides_in_columns_mobile' => '',
|
||
|
|
||
|
'slides_to_scroll_tablet' => '',
|
||
|
'slides_to_scroll_mobile' => '',
|
||
|
|
||
|
'spacing_slides_tablet' => '',
|
||
|
'spacing_slides_mobile' => ''
|
||
|
), $settings ) );
|
||
|
|
||
|
$spaceBetween = ( is_array( $spacing_slides ) && array_key_exists( 'size', $spacing_slides ) ) ?
|
||
|
absint( $spacing_slides['size'] ) : 0;
|
||
|
|
||
|
$spaceBetween_tablet = ( is_array( $spacing_slides_tablet ) && array_key_exists( 'size', $spacing_slides_tablet ) ) ?
|
||
|
absint( $spacing_slides_tablet['size'] ) : $spaceBetween;
|
||
|
|
||
|
$spaceBetween_mobile = ( is_array( $spacing_slides_mobile ) && array_key_exists( 'size', $spacing_slides_mobile ) ) ?
|
||
|
absint( $spacing_slides_mobile['size'] ) : $spaceBetween;
|
||
|
|
||
|
$options = array(
|
||
|
'slidesPerView' => ($columns_count != 'auto') ? ( ($slide_effects == 'cube') ? 1 : (int)$columns_count ) : $columns_count,
|
||
|
'slidesPerColumn' => (int)$slides_in_columns,
|
||
|
'slidesPerColumnFill' => 'row', //column
|
||
|
'slidesPerGroup' => (int)$slides_to_scroll,
|
||
|
'direction' => $slider_direction,
|
||
|
'autoHeight' => (($free_mode == 'yes' || (int)$slides_in_columns != 1) ? false : ($auto_height == 'yes')),
|
||
|
'keyboard' => $keyboard_control == 'yes',
|
||
|
'mousewheel' => $mousewheel_control == 'yes',
|
||
|
'centeredSlides' => $item_center == 'yes',
|
||
|
'spaceBetween' => $spaceBetween,
|
||
|
'freeMode' => $free_mode == 'yes',
|
||
|
'effect' => (($slider_direction == 'vertical' && $slide_effects == 'cube') ? 'slide' : $slide_effects),
|
||
|
'autoplay' => ($autoplay == 'yes') ? array('delay' => $autoplay_speed) : false,
|
||
|
'autoplayPause' => ($autoplay == 'yes' && $pause_on_hover == 'yes'),
|
||
|
'loop' => $loop == 'yes',
|
||
|
'speed' => $animation_speed,
|
||
|
'allowTouchMove' => $simulate_touch == 'yes',
|
||
|
|
||
|
'textAnimationDelay' => (int) $slide_text_animation_delay,
|
||
|
'coverflow_visible' => ($coverflow_visible == 'visible'),
|
||
|
|
||
|
//Responsive
|
||
|
'responsive' => array(
|
||
|
'slidesPerView_tablet' => ( $columns_count_tablet != 'auto') ? (int)$columns_count_tablet : $columns_count_tablet,
|
||
|
'slidesPerView_mobile' => ( $columns_count_mobile != 'auto') ? (int)$columns_count_mobile : $columns_count_mobile,
|
||
|
|
||
|
'slidesPerColumn_tablet' => (int)$slides_in_columns_tablet,
|
||
|
'slidesPerColumn_mobile' => (int)$slides_in_columns_mobile,
|
||
|
|
||
|
'slidesPerGroup_tablet' => (int)$slides_to_scroll_tablet,
|
||
|
'slidesPerGroup_mobile' => (int)$slides_to_scroll_mobile,
|
||
|
|
||
|
'spaceBetween_tablet' => $spaceBetween_tablet,
|
||
|
'spaceBetween_mobile' => $spaceBetween_mobile,
|
||
|
)
|
||
|
);
|
||
|
|
||
|
if ($navigation != 'none'){
|
||
|
//Arrows
|
||
|
$navigation_arrows = true;
|
||
|
|
||
|
//Bullets
|
||
|
$navigation_pagination = array(
|
||
|
'el' => '.swiper-pagination',
|
||
|
'type' => $pagination_style,
|
||
|
'clickable' => true,
|
||
|
'dynamicBullets' => ($dynamic_bullets == 'yes'),
|
||
|
);
|
||
|
|
||
|
//Scrollbar
|
||
|
$navigation_scrollbar = array(
|
||
|
'el' => '.swiper-scrollbar',
|
||
|
'draggable' => true
|
||
|
);
|
||
|
|
||
|
if ($navigation == 'both'){
|
||
|
$options['navigation'] = $navigation_arrows;
|
||
|
if ($pagination_style == 'scrollbar'){
|
||
|
$options['scrollbar'] = $navigation_scrollbar;
|
||
|
} else {
|
||
|
$options['pagination'] = $navigation_pagination;
|
||
|
}
|
||
|
} else if ($navigation == 'arrows') {
|
||
|
$options['navigation'] = $navigation_arrows;
|
||
|
} else if ($navigation == 'pagination') {
|
||
|
if ($pagination_style == 'scrollbar'){
|
||
|
$options['scrollbar'] = $navigation_scrollbar;
|
||
|
} else {
|
||
|
$options['pagination'] = $navigation_pagination;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $options;
|
||
|
}
|
||
|
|
||
|
function stratum_get_taxonomies($post_type){
|
||
|
$taxonomies = get_object_taxonomies( $post_type, 'objects' );
|
||
|
|
||
|
$return = [];
|
||
|
if (!empty($taxonomies)){
|
||
|
foreach ($taxonomies as $key => $taxonomy_name) {
|
||
|
$return[$key] = $taxonomy_name->labels->name;
|
||
|
}
|
||
|
}
|
||
|
return $return;
|
||
|
}
|
||
|
|
||
|
function stratum_get_terms($taxonomy){
|
||
|
$return = [];
|
||
|
$terms = get_terms(array(
|
||
|
'taxonomy' => $taxonomy,
|
||
|
'hide_empty' => true,
|
||
|
));
|
||
|
|
||
|
if (!empty($terms)){
|
||
|
foreach ($terms as $key => $term_name) {
|
||
|
$taxonomy_obj = get_taxonomy( $term_name->taxonomy );
|
||
|
$return[$term_name->slug] = $term_name->name;
|
||
|
}
|
||
|
}
|
||
|
return $return;
|
||
|
}
|
||
|
|
||
|
function stratum_build_custom_query(&$query_args = [], $settings = []){
|
||
|
|
||
|
if ((isset($settings['include_ids']) && $settings['include_ids'] != '') || isset($settings['post_type'])){
|
||
|
$query_args = array(
|
||
|
'posts_per_page' => $settings['posts_per_page'],
|
||
|
'ignore_sticky_posts' => 1,
|
||
|
'post_status' => 'publish',
|
||
|
'order' => $settings['order'],
|
||
|
'orderby' => $settings['orderby'],
|
||
|
);
|
||
|
|
||
|
if ( isset($settings['ignore_sticky_posts']) ){
|
||
|
$query_args['ignore_sticky_posts'] = $settings['ignore_sticky_posts'];
|
||
|
}
|
||
|
|
||
|
if (isset($settings['page'])){
|
||
|
$paged = $settings['page'];
|
||
|
} else {
|
||
|
$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;
|
||
|
}
|
||
|
|
||
|
if ( isset($settings['pagination']) && $settings['pagination'] == 'yes' ){
|
||
|
$query_args['paged'] = $paged;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//Exclude by IDs && Current Post ID
|
||
|
if ((isset($settings['exclude_ids']) && $settings['exclude_ids'] != '') || $settings['exclude_current']){
|
||
|
|
||
|
$ids_arr = [];
|
||
|
if ((isset($settings['exclude_ids']) && $settings['exclude_ids'] != '')){
|
||
|
$ids_arr = array_map( 'intval', explode(',', $settings['exclude_ids']) );
|
||
|
}
|
||
|
|
||
|
if ($settings['exclude_current']){
|
||
|
$ids_arr[] = get_the_ID();
|
||
|
}
|
||
|
|
||
|
$query_args['post__not_in'] = $ids_arr;
|
||
|
}
|
||
|
|
||
|
//Filter by IDs
|
||
|
if (isset($settings['include_ids']) && $settings['include_ids'] != ''){
|
||
|
|
||
|
$ids_arr = array_map( 'intval', explode(',', $settings['include_ids']) );
|
||
|
$query_args['post__in'] = $ids_arr;
|
||
|
|
||
|
}
|
||
|
|
||
|
//Set post_type
|
||
|
if ( isset($settings['post_type'])){
|
||
|
|
||
|
$query_args['post_type'] = $settings['post_type'];
|
||
|
|
||
|
if ( !empty($settings['taxonomies'])){
|
||
|
|
||
|
$query_args['tax_query'] = array(
|
||
|
'relation' => $settings['terms_relation'],
|
||
|
);
|
||
|
|
||
|
$taxonomy_arr = [];
|
||
|
|
||
|
//Get terms from taxonomy (Make arr)
|
||
|
foreach ($settings['taxonomies'] as $taxonomy_key => $taxonomy_name) {
|
||
|
if (isset($settings[$taxonomy_name.'_terms'])){
|
||
|
foreach ($settings[$taxonomy_name.'_terms'] as $term_key => $term_value) {
|
||
|
$taxonomy_arr[$taxonomy_name][] = $term_value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//Add array to query
|
||
|
if (!empty($taxonomy_arr)){
|
||
|
foreach ($taxonomy_arr as $taxonomy_name => $terms_arr) {
|
||
|
foreach ($terms_arr as $term_index => $term_name) {
|
||
|
$query_args['tax_query'][] = array(
|
||
|
'taxonomy' => $taxonomy_name,
|
||
|
'field' => 'slug',
|
||
|
'terms' => $term_name
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function stratum_css_class($class_array){
|
||
|
return implode(' ', array_filter($class_array));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Recursive sanitation for an array
|
||
|
*
|
||
|
* @param $array
|
||
|
*
|
||
|
* @return mixed
|
||
|
*/
|
||
|
function stratum_recursive_sanitize_array( $array ) {
|
||
|
|
||
|
foreach ( $array as $key => &$value ) {
|
||
|
if ( is_array( $value ) ) {
|
||
|
$value = stratum_recursive_sanitize_array($value);
|
||
|
}
|
||
|
else {
|
||
|
$value = sanitize_text_field( $value );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $array;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Validate an HTML tag against a safe allowed list.
|
||
|
*
|
||
|
* @param string $tag
|
||
|
*
|
||
|
* @return string Valid HTML tag allowed for headings
|
||
|
*/
|
||
|
function stratum_validate_heading_html_tag( $tag ) {
|
||
|
|
||
|
$allowed_tags = array(
|
||
|
'h1',
|
||
|
'h2',
|
||
|
'h3',
|
||
|
'h4',
|
||
|
'h5',
|
||
|
'h6',
|
||
|
'div',
|
||
|
'span',
|
||
|
'p',
|
||
|
);
|
||
|
|
||
|
return in_array( strtolower( $tag ), $allowed_tags ) ? $tag : 'div';
|
||
|
}
|