settings = $settings; $data = wp_parse_args( $this->get_template_args( $data ), $data ); $data = apply_filters( 'rtsb/general/post_grid/args/' . $data['unique_name'], $data ); $metas = PostHelpers::post_meta_dataset( $this->settings, $data['template'], $this->settings ); $args = ( new PostQueryArgs() )->buildArgs( $metas ); /** * Before Post query hook. */ do_action( 'rtsb/elements/render/before_post_grid_query', $this->settings, $args ); $query = new WP_Query( $args ); if ( $query->have_posts() ) { $data['post_query'] = $query; while ( $query->have_posts() ) { $query->the_post(); $data['grid_classes'] = $this->content_classes; $data = array_merge( $data, PostHelpers::get_post_arg_dataset( $this->settings ) ); $data['content'] .= Fns::load_template( $data['template'], $data, true ); } } else { $data['content'] = $this->no_posts_msg(); } wp_reset_postdata(); unset( $args['tax_query'] ); /** * After Product query hook. */ do_action( 'rtsb/elements/render/after_post_grid_query', $settings, $args ); return $this->addon_view( $data, $settings ); } /** * Retrieves template arguments based on widget settings. * * @param array $data Data to be passed to the template. * * @return array */ private function get_template_args( $data ) { if ( ! empty( $data['content_class'] ) ) { $this->content_classes[] = $data['content_class']; } $this->content_classes = is_array( $this->content_classes ) ? implode( ' ', $this->content_classes ) : $this->content_classes; return [ 'title_limit' => $this->settings['title_limit'] ?? 'default', 'excerpt_limit' => $this->settings['excerpt_limit'] ?? 'default', 'title_tag' => $this->settings['title_tag'] ?? 'h2', 'title_limit_custom' => $this->settings['title_limit_custom'] ?? '', 'excerpt_limit_custom' => $this->settings['excerpt_limit_custom'] ?? '200', 'show_title' => ! empty( $this->settings['show_title'] ), 'show_short_desc' => ! empty( $this->settings['show_short_desc'] ), 'show_post_thumbnail' => ! empty( $this->settings['show_post_thumbnail'] ), 'show_categories' => ! empty( $this->settings['show_categories'] ), 'show_tags' => ! empty( $this->settings['show_tags'] ), 'show_dates' => ! empty( $this->settings['show_dates'] ), 'show_comment' => ! empty( $this->settings['show_comment'] ), 'show_reading_time' => ! empty( $this->settings['show_reading_time'] ), 'show_post_views' => ! empty( $this->settings['show_post_views'] ), 'show_author' => ! empty( $this->settings['show_author'] ), 'show_read_more_btn' => ! empty( $this->settings['show_read_more_btn'] ), 'title_link' => ! empty( $this->settings['title_link'] ), 'image_link' => ! empty( $this->settings['image_link'] ), 'show_author_icon' => ! empty( $this->settings['show_author_icon'] ), 'show_date_icon' => ! empty( $this->settings['show_date_icon'] ), 'show_comment_icon' => ! empty( $this->settings['show_comment_icon'] ), 'show_reading_time_icon' => ! empty( $this->settings['show_reading_time_icon'] ), 'show_post_views_icon' => ! empty( $this->settings['show_post_views_icon'] ), 'author_icon_html' => $this->render_meta_icon( $this->settings['author_icon'] ?? '', 'author-icon' ), 'date_icon_html' => $this->render_meta_icon( $this->settings['date_icon'] ?? '', 'date-icon' ), 'comment_icon_html' => $this->render_meta_icon( $this->settings['comment_icon'] ?? '', 'comment-icon' ), 'reading_time_icon_html' => $this->render_meta_icon( $this->settings['reading_time_icon'] ?? '', 'reading-time-icon' ), 'post_views_icon_html' => $this->render_meta_icon( $this->settings['post_views_icon'] ?? '', 'post-views-icon' ), 'button_text' => $this->settings['button_text'] ?? '', 'button_icon' => $this->settings['button_icon'] ?? '', 'button_icon_position' => $this->settings['button_icon_position'] ?? 'right', 'meta_separator' => $this->settings['meta_separator'] ?? '', 'item_class' => $this->generate_post_item_class(), ]; } /** * Gets row arguments. * * @return array Row arguments. */ protected function get_row_args() { $limit = ( empty( $this->settings['posts_limit'] ) || '-1' === $this->settings['posts_limit'] ) ? 10000000 : $this->settings['posts_limit']; $posts_per_page = $this->settings['pagination_per_page'] ?? ''; return [ 'posts_limit' => $limit, 'posts_per_page' => $posts_per_page, ]; } /** * Function to render icon. * * @param string $position icon position ('left' or 'right'). * @param array $icon Position of the separator in settings. * @param string $icon_position icon position. * * @return string */ public static function render_icon( $position, $icon, $icon_position ) { $html = ''; // Render the left icon. if ( $position === $icon_position ) { $html .= '' . Fns::icons_manager( $icon ) . ''; } return $html; } /** * Function to render meta icon. * * @param array $icon Position of the separator in settings. * @param string $class icon class. * * @return string */ public static function render_meta_icon( $icon, $class ) { $html = ''; // Render the left icon. $html .= '' . Fns::icons_manager( $icon ) . ''; return $html; } /** * Function to generate item class. * * @return string */ public function generate_post_item_class() { $classes = 'rtsb-post-grid-item '; if ( empty( $this->settings['image_link'] ) ) { $classes .= 'no-img-linkable '; } if ( ! empty( $this->settings['image_hover_effect'] ) ) { $classes .= $this->settings['image_hover_effect']; } return $classes; } }