You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
844 lines
30 KiB
PHP
844 lines
30 KiB
PHP
<?php
|
|
/**
|
|
* Base Abstract Class
|
|
*
|
|
* @package RT_TPG
|
|
*/
|
|
|
|
use Elementor\Widget_Base;
|
|
use RT\ThePostGrid\Helpers\Fns;
|
|
use RT\ThePostGrid\Helpers\Options;
|
|
|
|
|
|
// Do not allow directly accessing this file.
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit( 'This script cannot be accessed directly.' );
|
|
}
|
|
|
|
/**
|
|
* Base Abstract Class
|
|
*/
|
|
abstract class Custom_Widget_Base extends Widget_Base {
|
|
public $tpg_name;
|
|
public $tpg_base;
|
|
public $tpg_category;
|
|
public $tpg_archive_category;
|
|
public $tpg_icon;
|
|
public $tpg_dir;
|
|
public $tpg_pro_dir;
|
|
public $is_post_layout;
|
|
public $pro_label;
|
|
public $get_pro_message;
|
|
public $prefix;
|
|
public $last_post_id;
|
|
|
|
public function __construct( $data = [], $args = null ) {
|
|
$this->tpg_category = RT_THE_POST_GRID_PLUGIN_SLUG . '-elements'; // Category /@dev
|
|
$this->tpg_archive_category = 'tpg-block-builder-widgets';
|
|
$this->tpg_icon = 'eicon-gallery-grid tpg-grid-icon';
|
|
$this->tpg_dir = dirname( ( new ReflectionClass( $this ) )->getFileName() );
|
|
$this->tpg_pro_dir = null;
|
|
$this->pro_label = null;
|
|
$this->is_post_layout = null;
|
|
$this->get_pro_message = null;
|
|
$this->last_post_id = $this->get_last_post_id();
|
|
|
|
if ( ! rtTPG()->hasPro() ) {
|
|
$this->pro_label = __( '<span class="tpg-pro-label">Pro</span>', 'the-post-grid' );
|
|
$this->is_post_layout = ' the-post-grid-pro-needed';
|
|
$this->get_pro_message = 'Please <a target="_blank" href="' . esc_url( rtTpg()->proLink() ) . '">upgrade</a> to pro for more options';
|
|
}
|
|
|
|
parent::__construct( $data, $args );
|
|
}
|
|
|
|
public function get_pro_message( $message = 'more options.' ) {
|
|
if ( rtTPG()->hasPro() ) {
|
|
return;
|
|
}
|
|
|
|
return 'Please <a target="_blank" href="' . esc_url( rtTpg()->proLink() ) . '">upgrade</a> to pro for ' . esc_html( $message );
|
|
}
|
|
|
|
public function get_name() {
|
|
return $this->tpg_base;
|
|
}
|
|
|
|
public function get_title() {
|
|
return $this->tpg_name;
|
|
}
|
|
|
|
public function get_icon() {
|
|
return $this->tpg_icon;
|
|
}
|
|
|
|
public function get_categories() {
|
|
return [ $this->tpg_category ];
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Get last post id
|
|
*
|
|
* @param string $post_type
|
|
* @param false $all_content
|
|
*
|
|
* @return int
|
|
*/
|
|
public function get_last_post_id( $post_type = 'post' ): int {
|
|
if ( is_singular( $post_type ) ) {
|
|
return get_the_ID();
|
|
}
|
|
|
|
global $wpdb;
|
|
$cache_key = 'tpg_last_post_id';
|
|
$_post_id = get_transient( $cache_key );
|
|
|
|
if ( false === $_post_id || 'publish' !== get_post_status( $_post_id ) ) {
|
|
delete_transient( $cache_key );
|
|
$_post_id = $wpdb->get_var(
|
|
$wpdb->prepare( "SELECT MAX(ID) FROM {$wpdb->prefix}posts WHERE post_type = %s AND post_status = %s", $post_type, 'publish' )
|
|
);
|
|
set_transient( $cache_key, $_post_id, 12 * HOUR_IN_SECONDS );
|
|
}
|
|
|
|
return absint( $_post_id );
|
|
}
|
|
|
|
|
|
|
|
//post category list
|
|
function tpg_category_list() {
|
|
$categories = get_categories( [ 'hide_empty' => false ] );
|
|
$lists = [];
|
|
foreach ( $categories as $category ) {
|
|
$lists[ $category->cat_ID ] = $category->name;
|
|
}
|
|
|
|
return $lists;
|
|
}
|
|
|
|
// post tags lists.
|
|
public function tpg_tag_list() {
|
|
$tags = get_tags( [ 'hide_empty' => false ] );
|
|
$tag_list = [];
|
|
foreach ( $tags as $tag ) {
|
|
$tag_list[ $tag->slug ] = $tag->name;
|
|
}
|
|
|
|
return $tag_list;
|
|
}
|
|
|
|
// Get Custom post category:.
|
|
protected function tpg_get_categories_by_slug( $cat ) {
|
|
$terms = get_terms(
|
|
[
|
|
'taxonomy' => $cat,
|
|
'hide_empty' => true,
|
|
]
|
|
);
|
|
$options = [ '0' => esc_html__( 'All Categories', 'the-post-grid' ) ];
|
|
|
|
if ( ! empty( $terms ) && ! is_wp_error( $terms ) ) {
|
|
foreach ( $terms as $term ) {
|
|
$options[ $term->slug ] = $term->name;
|
|
}
|
|
}
|
|
return $options;
|
|
}
|
|
|
|
|
|
public function get_all_post_type() {
|
|
$post_types = get_post_types( [], 'objects' );
|
|
$pt_list = [];
|
|
|
|
foreach ( $post_types as $type ) {
|
|
if ( isset( $type->rewrite->slug ) ) {
|
|
$pt_list[ $type->rewrite->slug ] = $type->rewrite->name;
|
|
}
|
|
}
|
|
|
|
return $pt_list;
|
|
}
|
|
|
|
public static function get_post_types() {
|
|
$post_types = get_post_types(
|
|
[
|
|
'public' => true,
|
|
'show_in_nav_menus' => true,
|
|
],
|
|
'objects'
|
|
);
|
|
$post_types = wp_list_pluck( $post_types, 'label', 'name' );
|
|
|
|
return array_diff_key( $post_types, [ 'elementor_library', 'attachment' ] );
|
|
}
|
|
|
|
/**
|
|
* Get Excluded Taxonomy
|
|
*
|
|
* @return string[]
|
|
*/
|
|
public static function get_excluded_taxonomy() {
|
|
return [
|
|
'post_format',
|
|
'nav_menu',
|
|
'link_category',
|
|
'wp_theme',
|
|
'elementor_library_type',
|
|
'elementor_library_type',
|
|
'elementor_library_category',
|
|
'product_visibility',
|
|
'product_shipping_class',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Get Filter markup
|
|
*
|
|
* @param $data
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_frontend_filter_markup( $data ) {
|
|
if ( ! rtTPG()->hasPro()
|
|
|| ! ( $data['show_taxonomy_filter'] == 'show' || $data['show_author_filter'] == 'show' || $data['show_order_by'] == 'show'
|
|
|| $data['show_sort_order'] == 'show'
|
|
|| $data['show_search'] == 'show' )
|
|
) {
|
|
return;
|
|
}
|
|
|
|
$html = null;
|
|
$wrapperContainer = $wrapperClass = $itemClass = $filter_btn_item_per_page = '';
|
|
|
|
if ( 'carousel' === $data['filter_btn_style'] ) {
|
|
$wrapperContainer = 'swiper';
|
|
$wrapperClass = 'swiper-wrapper';
|
|
$itemClass = 'swiper-slide';
|
|
$filter_btn_mobile = isset( $data['filter_btn_item_per_page_mobile'] ) ? $data['filter_btn_item_per_page_mobile'] : 'auto';
|
|
$filter_btn_tablet = isset( $data['filter_btn_item_per_page_tablet'] ) ? $data['filter_btn_item_per_page_tablet'] : 'auto';
|
|
$filter_btn_item_per_page = "data-per-page = '{$data['filter_btn_item_per_page']}' data-per-page-mobile = '{$filter_btn_mobile}' data-per-tablet = '{$filter_btn_tablet}'";
|
|
}
|
|
|
|
$html .= "<div class='rt-layout-filter-container rt-clear'><div class='rt-filter-wrap'>";
|
|
|
|
if ( 'show' == $data['show_author_filter'] || 'show' == $data['show_taxonomy_filter'] ) {
|
|
$html .= "<div class='filter-left-wrapper {$wrapperContainer}' {$filter_btn_item_per_page}>";
|
|
}
|
|
|
|
$selectedSubTermsForButton = null;
|
|
|
|
$filterType = $data['filter_type'];
|
|
$post_count = ( 'yes' == $data['filter_post_count'] ) ? true : false;
|
|
|
|
if ( 'show' == $data['show_taxonomy_filter'] ) {
|
|
$postCountClass = ( $post_count ? ' has-post-count' : null );
|
|
$allSelect = ' selected';
|
|
$isTermSelected = false;
|
|
|
|
$taxFilterOperator = $data['relation'];
|
|
|
|
$section_term_key = $data['post_type'] . '_filter_taxonomy';
|
|
$taxFilter = $data[ $section_term_key ];
|
|
|
|
$taxonomy_label = '';
|
|
|
|
if ( $taxFilter ) {
|
|
$taxonomy_details = get_taxonomy( $taxFilter );
|
|
$taxonomy_label = $taxonomy_details->label;
|
|
}
|
|
|
|
$default_term_key = $taxFilter . '_default_terms';
|
|
$default_term = $data[ $default_term_key ];
|
|
|
|
$allText = $data['tax_filter_all_text'] ? $data['tax_filter_all_text'] : esc_html__( 'All ', 'the-post-grid' ) . $taxonomy_label;
|
|
|
|
$_taxonomies = get_object_taxonomies( $data['post_type'], 'objects' );
|
|
$terms = [];
|
|
|
|
foreach ( $_taxonomies as $index => $object ) {
|
|
if ( $object->name != $taxFilter ) {
|
|
continue;
|
|
}
|
|
|
|
$setting_key = $object->name . '_ids';
|
|
|
|
if ( ! empty( $data[ $setting_key ] ) ) {
|
|
$terms = $data[ $setting_key ];
|
|
} else {
|
|
$terms = get_terms(
|
|
[
|
|
'taxonomy' => $taxFilter,
|
|
'fields' => 'ids',
|
|
]
|
|
);
|
|
}
|
|
}
|
|
$taxFilterTerms = $terms;
|
|
|
|
if ( $default_term && $taxFilter ) {
|
|
$isTermSelected = true;
|
|
$allSelect = null;
|
|
}
|
|
|
|
if ( $filterType == 'dropdown' ) {
|
|
$html .= "<div class='rt-filter-item-wrap rt-tax-filter rt-filter-dropdown-wrap parent-dropdown-wrap{$postCountClass}' data-taxonomy='{$taxFilter}' data-filter='taxonomy'>";
|
|
$termDefaultText = $allText;
|
|
$dataTerm = 'all';
|
|
$htmlButton = '';
|
|
$selectedSubTerms = null;
|
|
$pCount = 0;
|
|
|
|
if ( ! empty( $terms ) ) {
|
|
$i = 0;
|
|
|
|
foreach ( $terms as $term_id ) {
|
|
$term = get_term( $term_id, $taxFilter, ARRAY_A );
|
|
$id = $term['term_id'];
|
|
$pCount = $pCount + $term['count'];
|
|
$sT = null;
|
|
|
|
if ( $data['tgp_filter_taxonomy_hierarchical'] == 'yes' ) {
|
|
$subTerms = Fns::rt_get_all_term_by_taxonomy( $taxFilter, true, $id );
|
|
|
|
if ( ! empty( $subTerms ) ) {
|
|
$count = 0;
|
|
$item = $allCount = null;
|
|
|
|
foreach ( $subTerms as $stId => $t ) {
|
|
$count = $count + absint( $t['count'] );
|
|
$sTPostCount = ( $post_count ? " (<span class='rt-post-count'>{$t['count']}</span>)" : null );
|
|
$item .= "<span class='term-dropdown-item rt-filter-dropdown-item' data-term='{$stId}'><span class='rt-text'>{$t['name']}{$sTPostCount}</span></span>";
|
|
}
|
|
|
|
if ( $post_count ) {
|
|
$allCount = " (<span class='rt-post-count'>{$count}</span>)";
|
|
}
|
|
|
|
$sT .= "<div class='rt-filter-item-wrap rt-tax-filter rt-filter-dropdown-wrap sub-dropdown-wrap{$postCountClass}'>";
|
|
$sT .= "<span class='term-default rt-filter-dropdown-default' data-term='{$id}'>
|
|
<span class='rt-text'>" . $allText . "</span>
|
|
<i class='fa fa-angle-down rt-arrow-angle' aria-hidden='true'></i>
|
|
</span>";
|
|
$sT .= '<span class="term-dropdown rt-filter-dropdown">';
|
|
$sT .= $item;
|
|
$sT .= '</span>';
|
|
$sT .= '</div>';
|
|
}
|
|
|
|
if ( $default_term === $id ) {
|
|
$selectedSubTerms = $sT;
|
|
}
|
|
}
|
|
$postCount = ( $post_count ? " (<span class='rt-post-count'>{$term['count']}</span>)" : null );
|
|
|
|
if ( $default_term && $default_term == $id ) {
|
|
$termDefaultText = $term['name'] . $postCount;
|
|
$dataTerm = $id;
|
|
}
|
|
|
|
if ( is_array( $taxFilterTerms ) && ! empty( $taxFilterTerms ) ) {
|
|
if ( in_array( $id, $taxFilterTerms ) ) {
|
|
$htmlButton .= "<span class='term-dropdown-item rt-filter-dropdown-item' data-term='{$id}'><span class='rt-text'>{$term['name']}{$postCount}</span>{$sT}</span>";
|
|
}
|
|
} else {
|
|
$htmlButton .= "<span class='term-dropdown-item rt-filter-dropdown-item' data-term='{$id}'><span class='rt-text'>{$term['name']}{$postCount}</span>{$sT}</span>";
|
|
}
|
|
|
|
$i ++;
|
|
}
|
|
}
|
|
$pAllCount = null;
|
|
|
|
if ( $post_count ) {
|
|
$pAllCount = " (<span class='rt-post-count'>{$pCount}</span>)";
|
|
|
|
if ( ! $default_term ) {
|
|
$termDefaultText = $termDefaultText;
|
|
}
|
|
}
|
|
|
|
if ( 'yes' == $data['tpg_hide_all_button'] ) {
|
|
$htmlButton = "<span class='term-dropdown-item rt-filter-dropdown-item' data-term='all'><span class='rt-text'>" . $allText . '</span></span>' . $htmlButton;
|
|
}
|
|
|
|
$htmlButton = sprintf( '<span class="term-dropdown rt-filter-dropdown">%s</span>', $htmlButton );
|
|
|
|
$showAllhtml = '<span class="term-default rt-filter-dropdown-default" data-term="' . $dataTerm . '">
|
|
<span class="rt-text">' . $termDefaultText . '</span>
|
|
<i class="fa fa-angle-down rt-arrow-angle" aria-hidden="true"></i>
|
|
</span>';
|
|
|
|
$html .= $showAllhtml . $htmlButton;
|
|
$html .= '</div>' . $selectedSubTerms;
|
|
} else {
|
|
// if Button the execute.
|
|
// $termDefaultText = $allText;
|
|
|
|
$bCount = 0;
|
|
$bItems = null;
|
|
|
|
if ( ! empty( $terms ) ) {
|
|
foreach ( $terms as $term_id ) {
|
|
$term = get_term( $term_id, $taxFilter, ARRAY_A );
|
|
$id = $term['term_id'];
|
|
$bCount = $bCount + absint( $term['count'] );
|
|
$sT = null;
|
|
|
|
if ( $data['tgp_filter_taxonomy_hierarchical'] == 'yes' && $data['filter_btn_style'] === 'default' && $data['filter_type'] == 'button' ) {
|
|
$subTerms = Fns::rt_get_all_term_by_taxonomy( $taxFilter, true, $id );
|
|
|
|
if ( ! empty( $subTerms ) ) {
|
|
$sT .= "<div class='rt-filter-sub-tax sub-button-group '>";
|
|
|
|
foreach ( $subTerms as $stId => $t ) {
|
|
$sTPostCount = ( $post_count ? " (<span class='rt-post-count'>{$t['count']}</span>)" : null );
|
|
$sT .= "<span class='term-button-item rt-filter-button-item ' data-term='{$stId}'>{$t['name']}{$sTPostCount}</span>";
|
|
}
|
|
|
|
$sT .= '</div>';
|
|
|
|
if ( $default_term === $id ) {
|
|
$selectedSubTermsForButton = $sT;
|
|
}
|
|
}
|
|
}
|
|
$postCount = ( $post_count ? " (<span class='rt-post-count'>{$term['count']}</span>)" : null );
|
|
$termSelected = null;
|
|
|
|
if ( $isTermSelected && $id == $default_term ) {
|
|
$termSelected = ' selected';
|
|
}
|
|
|
|
if ( is_array( $taxFilterTerms ) && ! empty( $taxFilterTerms ) ) {
|
|
if ( in_array( $id, $taxFilterTerms ) ) {
|
|
$bItems .= "<span class='term-button-item rt-filter-button-item {$termSelected} {$itemClass}' data-term='{$id}'>{$term['name']}{$postCount}{$sT}</span>";
|
|
}
|
|
} else {
|
|
$bItems .= "<span class='term-button-item rt-filter-button-item {$termSelected} {$itemClass}' data-term='{$id}'>{$term['name']}{$postCount}{$sT}</span>";
|
|
}
|
|
}
|
|
}
|
|
$html .= "<div class='rt-filter-item-wrap rt-tax-filter rt-filter-button-wrap{$postCountClass} {$wrapperClass}' data-taxonomy='{$taxFilter}' data-filter='taxonomy'>";
|
|
|
|
if ( 'yes' == $data['tpg_hide_all_button'] ) {
|
|
$html .= "<span class='term-button-item rt-filter-button-item {$allSelect} {$itemClass}' data-term='all'>" . $allText . '</span>';
|
|
}
|
|
|
|
$html .= $bItems;
|
|
|
|
$html .= '</div>';
|
|
|
|
if ( 'carousel' === $data['filter_btn_style'] ) {
|
|
$html .= '<div class="swiper-navigation"><div class="swiper-button-prev slider-btn"></div><div class="swiper-button-next slider-btn"></div></div>';
|
|
}
|
|
}
|
|
}
|
|
|
|
// TODO: Author filter.
|
|
if ( 'show' == $data['show_author_filter'] ) {
|
|
$user_el = $data['author'];
|
|
|
|
$filterAuthors = $user_el;
|
|
|
|
if ( ! empty( $user_el ) ) {
|
|
$users = get_users( apply_filters( 'tpg_author_arg', [ 'include' => $user_el ] ) );
|
|
} else {
|
|
$users = get_users( apply_filters( 'tpg_author_arg', [] ) );
|
|
}
|
|
|
|
$allText = $allText = $data['author_filter_all_text'] ? $data['author_filter_all_text'] : esc_html__( 'All Users', 'the-post-grid' );
|
|
$allSelect = ' selected';
|
|
$isTermSelected = true;
|
|
|
|
if ( $filterType == 'dropdown' ) {
|
|
$html .= "<div class='rt-filter-item-wrap rt-author-filter rt-filter-dropdown-wrap parent-dropdown-wrap{$postCountClass}' data-filter='author'>";
|
|
$termDefaultText = $allText;
|
|
$dataAuthor = 'all';
|
|
$htmlButton = '';
|
|
$htmlButton .= '<span class="author-dropdown rt-filter-dropdown">';
|
|
$htmlButton .= "<span class='term-dropdown-item rt-filter-dropdown-item' data-term='all'>" . $allText . '</span>';
|
|
|
|
if ( ! empty( $users ) ) {
|
|
foreach ( $users as $user ) {
|
|
$user_post_count = false;
|
|
$post_count ? '(' . count_user_posts( $user->ID, $data['post_type'] ) . ')' : null;
|
|
|
|
if ( is_array( $filterAuthors ) && ! empty( $filterAuthors ) ) {
|
|
if ( in_array( $user->ID, $filterAuthors ) ) {
|
|
if ( $default_term == $user->ID ) {
|
|
$termDefaultText = $user->display_name;
|
|
$dataTerm = $user->ID;
|
|
} else {
|
|
$htmlButton .= "<span class='term-dropdown-item rt-filter-dropdown-item' data-term='{$user->ID}'>{$user->display_name} <span class='rt-text'>{$user_post_count}</span></span>";
|
|
}
|
|
}
|
|
} else {
|
|
if ( $default_term == $user->ID ) {
|
|
$termDefaultText = $user->display_name;
|
|
$dataTerm = $user->ID;
|
|
} else {
|
|
$htmlButton .= "<span class='term-dropdown-item rt-filter-dropdown-item' data-term='{$user->ID}'><span class='rt-text'>{$user->display_name} {$user_post_count}</span></span>";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$htmlButton .= '</span>';
|
|
|
|
$showAllhtml = '<span class="term-default rt-filter-dropdown-default" data-term="' . $dataAuthor . '">
|
|
<span class="rt-text">' . $termDefaultText . '</span>
|
|
<i class="fa fa-angle-down rt-arrow-angle" aria-hidden="true"></i>
|
|
</span>';
|
|
|
|
$html .= $showAllhtml . $htmlButton;
|
|
$html .= '</div>';
|
|
} else {
|
|
$bCount = 0;
|
|
$bItems = null;
|
|
|
|
if ( ! empty( $users ) ) {
|
|
foreach ( $users as $user ) {
|
|
if ( is_array( $filterAuthors ) && ! empty( $filterAuthors ) ) {
|
|
if ( in_array( $user->ID, $filterAuthors ) ) {
|
|
$bItems .= "<span class='author-button-item rt-filter-button-item' data-term='{$user->ID}'>{$user->display_name}</span>";
|
|
}
|
|
} else {
|
|
$bItems .= "<span class='author-button-item rt-filter-button-item' data-term='{$user->ID}'>{$user->display_name}</span>";
|
|
}
|
|
}
|
|
}
|
|
|
|
$html .= "<div class='rt-filter-item-wrap rt-author-filter rt-filter-button-wrap{$postCountClass}' data-filter='author'>";
|
|
$html .= "<span class='author-button-item rt-filter-button-item {$allSelect}' data-author='all'>" . $allText . '</span>';
|
|
$html .= $bItems;
|
|
$html .= '</div>';
|
|
}
|
|
}
|
|
|
|
if ( 'show' == $data['show_author_filter'] || 'show' == $data['show_taxonomy_filter'] ) {
|
|
$html .= '</div>';
|
|
}
|
|
|
|
if ( 'show' == $data['show_order_by'] || 'show' == $data['show_sort_order'] || 'show' == $data['show_search'] ) {
|
|
$html .= "<div class='filter-right-wrapper'>";
|
|
}
|
|
|
|
// TODO: Order Filter.
|
|
if ( 'show' == $data['show_sort_order'] ) {
|
|
$action_order = ( $data['order'] ? strtoupper( $data['order'] ) : 'DESC' );
|
|
$html .= '<div class="rt-filter-item-wrap rt-sort-order-action" data-filter="order">';
|
|
$html .= "<span class='rt-sort-order-action-arrow' data-sort-order='{$action_order}'> <span></span></span>";
|
|
$html .= '</div>';
|
|
}
|
|
|
|
// TODO: Orderby Filter.
|
|
if ( 'show' == $data['show_order_by'] ) {
|
|
$wooFeature = ( $data['post_type'] == 'product' ? true : false );
|
|
$orders = Options::rtPostOrderBy( $wooFeature );
|
|
$action_orderby = ( ! empty( $data['orderby'] ) ? $data['orderby'] : 'none' );
|
|
|
|
if ( $action_orderby == 'none' ) {
|
|
$action_orderby_label = esc_html__( 'Sort By', 'the-post-grid' );
|
|
} elseif ( in_array( $action_orderby, array_keys( Options::rtMetaKeyType() ) ) ) {
|
|
$action_orderby_label = esc_html__( 'Meta value', 'the-post-grid' );
|
|
} else {
|
|
$action_orderby_label = esc_html__( 'By ', 'the-post-grid' ) . $action_orderby;
|
|
}
|
|
|
|
if ( $action_orderby !== 'none' ) {
|
|
$orders['none'] = esc_html__( 'Sort By', 'the-post-grid' );
|
|
}
|
|
|
|
$html .= '<div class="rt-filter-item-wrap rt-order-by-action rt-filter-dropdown-wrap" data-filter="orderby">';
|
|
$html .= "<span class='order-by-default rt-filter-dropdown-default' data-order-by='{$action_orderby}'>
|
|
<span class='rt-text-order-by'>{$action_orderby_label}</span>
|
|
<i class='fa fa-angle-down rt-arrow-angle' aria-hidden='true'></i>
|
|
</span>";
|
|
$html .= '<span class="order-by-dropdown rt-filter-dropdown">';
|
|
|
|
foreach ( $orders as $orderKey => $order ) {
|
|
$html .= '<span class="order-by-dropdown-item rt-filter-dropdown-item" data-order-by="' . $orderKey . '">' . $order . '</span>';
|
|
}
|
|
|
|
$html .= '</span>';
|
|
$html .= '</div>';
|
|
}
|
|
|
|
// TODO: Search Filter.
|
|
if ( 'show' == $data['show_search'] ) {
|
|
$html .= '<div class="rt-filter-item-wrap rt-search-filter-wrap" data-filter="search">';
|
|
$html .= sprintf( '<input type="text" class="rt-search-input" placeholder="%s">', esc_html__( 'Search...', 'the-post-grid' ) );
|
|
$html .= "<span class='rt-action'>🔍</span>";
|
|
$html .= "<span class='rt-loading'></span>";
|
|
$html .= '</div>';
|
|
}
|
|
|
|
if ( 'show' == $data['show_order_by'] || 'show' == $data['show_sort_order'] || 'show' == $data['show_search'] ) {
|
|
$html .= '</div>';
|
|
}
|
|
|
|
$html .= "</div>$selectedSubTermsForButton</div>";
|
|
|
|
return $html;
|
|
}
|
|
|
|
/**
|
|
* Get Post Pagination, Load more & Scroll markup
|
|
*
|
|
* @param $query
|
|
* @param $data
|
|
*
|
|
* @return false|string|void
|
|
*/
|
|
public function get_pagination_markup( $query, $data ) {
|
|
if ( 'show' !== $data['show_pagination'] ) {
|
|
return;
|
|
}
|
|
|
|
$htmlUtility = null;
|
|
|
|
$posts_loading_type = $data['pagination_type'];
|
|
$posts_per_page = ( isset( $data['display_per_page'] ) && $data['display_per_page'] ) ? $data['display_per_page']
|
|
: ( $data['post_limit'] ? $data['post_limit'] : get_option( 'posts_per_page' ) );
|
|
$hide = ( $query->max_num_pages < 2 ? ' rt-hidden-elm' : null );
|
|
|
|
if ( $posts_loading_type == 'pagination' ) {
|
|
$htmlUtility .= Fns::rt_pagination( $query, $posts_per_page );
|
|
} elseif ( rtTPG()->hasPro() && $posts_loading_type == 'pagination_ajax' ) { // && ! $isIsotope
|
|
$htmlUtility .= "<div class='rt-page-numbers'></div>";
|
|
} elseif ( rtTPG()->hasPro() && $posts_loading_type == 'load_more' ) {
|
|
$load_more_btn_text = $data['load_more_button_text'] ? esc_html( $data['load_more_button_text'] ) : esc_html__( 'Load More', 'the-post-grid' );
|
|
$htmlUtility .= "<div class='rt-loadmore-btn rt-loadmore-action rt-loadmore-style{$hide}'>
|
|
<span class='rt-loadmore-text'>" . $load_more_btn_text . "</span>
|
|
<div class='rt-loadmore-loading rt-ball-scale-multiple rt-2x'><div></div><div></div><div></div></div>
|
|
</div>";
|
|
} elseif ( rtTPG()->hasPro() && $posts_loading_type == 'load_on_scroll' ) {
|
|
$htmlUtility .= "<div class='rt-infinite-action'>
|
|
<div class='rt-infinite-loading la-fire la-2x'>
|
|
<div></div><div></div><div></div>
|
|
</div>
|
|
</div>";
|
|
}
|
|
|
|
if ( $htmlUtility ) {
|
|
$html = "<div class='rt-pagination-wrap' data-total-pages='{$query->max_num_pages}' data-posts-per-page='{$posts_per_page}' data-type='{$posts_loading_type}' >" . $htmlUtility . '</div>';
|
|
|
|
return $html;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Get Popup Modal Markup
|
|
*/
|
|
public function get_modal_markup() {
|
|
$html = null;
|
|
$html .= '<div class="md-modal rt-md-effect" id="rt-modal">
|
|
<div class="md-content">
|
|
<div class="rt-md-content-holder"></div>
|
|
<div class="md-cls-btn">
|
|
<button class="md-close"><i class="fa fa-times" aria-hidden="true"></i></button>
|
|
</div>
|
|
</div>
|
|
</div>';
|
|
$html .= "<div class='md-overlay'></div>";
|
|
|
|
Fns::print_html( $html );
|
|
}
|
|
|
|
/**
|
|
* Get Archive page title
|
|
*/
|
|
public function get_archive_title() {
|
|
$queried_obj = get_queried_object();
|
|
|
|
if ( is_tag() || is_category() ) {
|
|
echo esc_html( $queried_obj->name );
|
|
} elseif ( is_author() ) {
|
|
echo esc_html( $queried_obj->display_name );
|
|
} elseif ( is_date() ) {
|
|
$year = get_query_var( 'year' );
|
|
$monthnum = get_query_var( 'monthnum' );
|
|
$day = get_query_var( 'day' );
|
|
$time_string = $year . '/' . $monthnum . '/' . $day;
|
|
$time_stamp = strtotime( $time_string );
|
|
Fns::print_html( date( get_option( 'date_format' ), $time_stamp ) );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get Section Title
|
|
*
|
|
* @param $data
|
|
*/
|
|
public function get_section_title( $data ) {
|
|
if ( 'show' != $data['show_section_title'] ) {
|
|
return;
|
|
}
|
|
|
|
$_is_link = false;
|
|
|
|
if ( ! empty( $data['section_title_link']['url'] ) ) {
|
|
$this->add_link_attributes( 'section_title_link', $data['section_title_link'] );
|
|
$_is_link = true;
|
|
}
|
|
|
|
$this->add_inline_editing_attributes( 'section_title_text', 'none' );
|
|
ob_start();
|
|
?>
|
|
|
|
<div class="tpg-widget-heading-wrapper rt-clear heading-<?php echo esc_attr( $data['section_title_style'] ); ?> ">
|
|
<span class="tpg-widget-heading-line line-left"></span>
|
|
|
|
<?php printf( "<%s class='tpg-widget-heading'>", esc_attr( $data['section_title_tag'] ) ); ?>
|
|
|
|
<?php
|
|
if ( $_is_link ) :
|
|
?>
|
|
<a <?php Fns::print_html( $this->get_render_attribute_string( 'section_title_link' ), true ); ?>>
|
|
<?php endif; ?>
|
|
|
|
<?php
|
|
if ( 'page_title' == $data['section_title_source'] ) {
|
|
$archive_prefix = $data['title_prefix'] ? $data['title_prefix'] . ' ' : null;
|
|
$archive_suffix = $data['title_suffix'] ? ' ' . $data['title_suffix'] : null;
|
|
printf( "<span class='prefix-text'>%s</span>", esc_html( $archive_prefix ) );
|
|
|
|
if ( is_archive() ) {
|
|
Fns::get_archive_title();
|
|
} elseif ( is_search() ) {
|
|
echo get_query_var( 's' );
|
|
} else {
|
|
the_title();
|
|
}
|
|
|
|
printf( "<span class='suffix-text'>%s</span>", esc_html( $archive_suffix ) );
|
|
} else {
|
|
?>
|
|
<span <?php $this->print_render_attribute_string( 'section_title_text' ); ?>>
|
|
<?php $this->print_unescaped_setting( 'section_title_text' ); ?>
|
|
</span>
|
|
<?php
|
|
}
|
|
?>
|
|
|
|
<?php if ( $_is_link ) : ?>
|
|
</a>
|
|
|
|
<?php endif; ?>
|
|
<?php printf( '</%s>', $data['section_title_tag'] ); ?>
|
|
<span class="tpg-widget-heading-line line-right"></span>
|
|
</div>
|
|
|
|
<?php if ( isset( $data['show_cat_desc'] ) && $data['show_cat_desc'] == 'yes' && category_description( Fns::get_last_category_id() ) ) : ?>
|
|
<div class="tpg-category-description">
|
|
<?php echo category_description( Fns::get_last_category_id() ); ?>
|
|
</div>
|
|
|
|
<?php endif; ?>
|
|
|
|
<?php
|
|
Fns::print_html( ob_get_clean() );
|
|
}
|
|
|
|
|
|
/**
|
|
* Get Post Data for render post
|
|
*
|
|
* @param $data
|
|
* @param $total_pages
|
|
* @param $posts_per_page
|
|
*
|
|
* @return array
|
|
*/
|
|
public function get_render_data_set( $data, $total_pages, $posts_per_page ) {
|
|
$_prefix = $this->prefix;
|
|
|
|
$data_set = [
|
|
'block_type' => 'elementor',
|
|
'prefix' => $_prefix,
|
|
'grid_column' => $data[ $_prefix . '_column' ],
|
|
'grid_column_tablet' => isset( $data[ $_prefix . '_column_tablet' ] ) ? $data[ $_prefix . '_column_tablet' ] : '0',
|
|
'grid_column_mobile' => isset( $data[ $_prefix . '_column_mobile' ] ) ? $data[ $_prefix . '_column_mobile' ] : '0',
|
|
'layout' => $data[ $_prefix . '_layout' ],
|
|
'pagination_type' => 'slider' === $_prefix ? 'slider' : $data['pagination_type'],
|
|
'total_pages' => $total_pages,
|
|
'posts_per_page' => $posts_per_page,
|
|
'layout_style' => isset( $data[ $_prefix . '_layout_style' ] ) ? $data[ $_prefix . '_layout_style' ] : '',
|
|
'show_title' => $data['show_title'],
|
|
'excerpt_type' => $data['excerpt_type'],
|
|
'excerpt_limit' => $data['excerpt_limit'],
|
|
'excerpt_more_text' => $data['excerpt_more_text'],
|
|
'title_limit' => $data['title_limit'],
|
|
'title_limit_type' => $data['title_limit_type'],
|
|
'title_visibility_style' => $data['title_visibility_style'],
|
|
'post_link_type' => $data['post_link_type'],
|
|
'link_target' => $data['link_target'],
|
|
'hover_animation' => isset( $data['hover_animation'] ) ? $data['hover_animation'] : '',
|
|
'show_thumb' => $data['show_thumb'],
|
|
'show_meta' => $data['show_meta'],
|
|
'show_author' => $data['show_author'],
|
|
'show_author_image' => $data['show_author_image'],
|
|
'show_meta_icon' => $data['show_meta_icon'],
|
|
'show_category' => $data['show_category'],
|
|
'show_date' => $data['show_date'],
|
|
'show_tags' => $data['show_tags'],
|
|
'show_comment_count' => $data['show_comment_count'],
|
|
'show_comment_count_label' => isset( $data['show_comment_count_label'] ) ? $data['show_comment_count_label'] : '',
|
|
'comment_count_label_singular' => isset( $data['comment_count_label_singular'] ) ? $data['comment_count_label_singular'] : '',
|
|
'comment_count_label_plural' => isset( $data['comment_count_label_plural'] ) ? $data['comment_count_label_plural'] : '',
|
|
'show_post_count' => $data['show_post_count'],
|
|
'post_count_icon' => $data['post_count_icon'],
|
|
'show_excerpt' => $data['show_excerpt'],
|
|
'show_read_more' => $data['show_read_more'],
|
|
'show_btn_icon' => $data['show_btn_icon'],
|
|
'show_social_share' => $data['show_social_share'],
|
|
'show_cat_icon' => isset( $data['show_cat_icon'] ) ? $data['show_cat_icon'] : '',
|
|
'is_thumb_linked' => $data['is_thumb_linked'],
|
|
'media_source' => $data['media_source'],
|
|
'no_posts_found_text' => isset( $data['no_posts_found_text'] ) ? $data['no_posts_found_text'] : '',
|
|
'image_size' => $data['image_size'],
|
|
'image_offset' => $data['image_offset_size'],
|
|
'is_default_img' => $data['is_default_img'],
|
|
'default_image' => $data['default_image'],
|
|
'thumb_overlay_visibility' => isset( $data['thumb_overlay_visibility'] ) ? $data['thumb_overlay_visibility'] : '',
|
|
'overlay_type' => isset( $data['overlay_type'] ) ? $data['overlay_type'] : '',
|
|
'title_tag' => $data['title_tag'],
|
|
'post_type' => $data['post_type'],
|
|
'meta_separator' => $data['meta_separator'],
|
|
'readmore_icon_position' => $data['readmore_icon_position'],
|
|
'read_more_label' => $data['read_more_label'],
|
|
'readmore_btn_icon' => $data['readmore_btn_icon'],
|
|
'category_position' => $data['category_position'],
|
|
'title_position' => $data['title_position'],
|
|
'category_style' => $data['category_style'],
|
|
'is_thumb_lightbox' => $data['is_thumb_lightbox'],
|
|
'light_box_icon' => $data['light_box_icon'],
|
|
'author_prefix' => $data['author_prefix'],
|
|
'cat_icon' => $data['cat_icon'],
|
|
'tag_icon' => $data['tag_icon'],
|
|
'date_icon' => $data['date_icon'],
|
|
'user_icon' => $data['user_icon'],
|
|
'meta_ordering' => $data['meta_ordering'],
|
|
'comment_icon' => $data['comment_icon'],
|
|
'image_custom_dimension' => ( $data['image_size'] == 'custom' && isset( $data['image_custom_dimension'] ) ) ? $data['image_custom_dimension'] : '',
|
|
'img_crop_style' => ( $data['image_size'] == 'custom' && isset( $data['img_crop_style'] ) ) ? $data['img_crop_style'] : '',
|
|
'show_acf' => isset( $data['show_acf'] ) ? $data['show_acf'] : '',
|
|
];
|
|
|
|
$cf = Fns::is_acf();
|
|
if ( $cf && rtTPG()->hasPro() ) {
|
|
$post_type = $data['post_type'];
|
|
$data_set['cf_group'] = $data[ $post_type . '_cf_group' ];
|
|
$data_set['cf_hide_empty_value'] = $data['cf_hide_empty_value'];
|
|
$data_set['cf_show_only_value'] = $data['cf_show_only_value'];
|
|
$data_set['cf_hide_group_title'] = $data['cf_hide_group_title'];
|
|
}
|
|
|
|
return $data_set;
|
|
}
|
|
}
|