documents->get( $post_id );
return ( $document && $document->is_built_with_elementor() );
}
return false; // Elementor not active.
}
/**
* Get Elementor Content to Display
*
* @param int $post_id Post ID.
* @return string
*/
function blogsy_get_display_elementor_content( int $post_id ): string {
if ( ! class_exists( 'Elementor\Plugin' ) ) {
return '';
}
$plugin_elementor = \Elementor\Plugin::instance();
return $plugin_elementor->frontend->get_builder_content_for_display( $post_id );
}
/**
* Render custom section content before/after Blogsy sections.
*
* @since 1.0.0
* @param int $template_id Blogsy template id.
* @return null|string Rendered content or null if no template found.
*/
function blogsy_template_section_render( int $template_id ): ?string {
if ( ! $template_id ) {
return null;
}
// Get the blogsy-template post by id.
$template = get_post( $template_id );
if ( ! $template ) {
return null;
}
// Check if built using Elementor.
if ( blogsy_is_elementor_page( $template->ID ) ) {
// Retrieve Elementor content.
$content = blogsy_get_display_elementor_content( $template->ID );
} else {
// Retrieve normal post content.
$content = do_shortcode( do_blocks( $template->post_content ) );
}
return $content;
}
/**
* Get template id of layout
*
* @since 1.0.0
* @param string $layout Layout name.
* @return int Template ID.
*/
function blogsy_get_layout_template_id( string $layout ): int {
$template_id = 0;
if ( ! $layout || ! class_exists( '\Blogsy\Addons\Helper' ) ) {
return $template_id;
}
$layout = strtolower( $layout );
return \Blogsy\Addons\Helper::get_layout_template_id( $layout );
}
/**
* Get Sidebar Position
*
* @since 1.0
*
* @param string $sidebar_for The context for which the sidebar position is being retrieved (e.g., 'single_post', 'single_page').
* @param string $default_pos The default sidebar position to return if no specific position is set.
*
* @return string The sidebar position ('left', 'right', 'none', 'none-narrow', 'elementor').
*/
function blogsy_get_sidebar_position( string $sidebar_for, string $default_pos ): string {
// Default Sidebar Position for theme settings.
$sidebar_position = Helper::get_option( $sidebar_for . '_sidebar_position' );
switch ( $sidebar_position ) {
case 'left':
case 'right':
case 'none':
case 'none-narrow':
break;
default:
$sidebar_position = 'right';
}
// Custom Sidebar Position for the post.
if ( 'single_post' === $sidebar_for || 'single_page' === $sidebar_for ) {
switch ( get_post_meta( get_the_ID(), 'blogsy_page_sidebar', true ) ) {
case 'left':
$sidebar_position = 'left';
break;
case 'right':
$sidebar_position = 'right';
break;
case 'none':
$sidebar_position = 'none';
break;
case 'none-narrow':
$sidebar_position = 'none-narrow';
break;
case 'elementor':
$sidebar_position = 'elementor';
break;
}
}
// Check Sidebar For Content.
if ( in_array( $sidebar_position, [ 'left', 'right' ], true ) ) {
$sidebar_template_id = blogsy_get_layout_template_id( 'sidebar' );
if ( ! $sidebar_template_id && ! is_active_sidebar( 'sidebar-1' ) ) {
$sidebar_position = $default_pos;
}
}
return $sidebar_position;
}
/**
* Calculate Post Reading Time
*
* @param mixed $post Post ID or WP_Post object.
* @return int|false Estimated reading time in minutes, or false if post is invalid.
* @since 1.0.0
*/
function blogsy_get_reading_time( $post = null ) {
$post = get_post( $post );
if ( ! $post ) {
return false;
}
$custom_reading_time = absint( get_post_meta( get_the_ID(), 'blogsy_single_reading_time', true ) );
if ( $custom_reading_time ) {
return $custom_reading_time;
}
$words_per_minute = absint( Helper::get_option( 'reading_time_words_per_minute' ) );
$words_per_minute = $words_per_minute ?: 255;
$content = get_post_field( 'post_content', $post );
$number_of_images = substr_count( strtolower( $content ), '
'true' ] );
break;
case 'video':
$post_format_icon = \Blogsy\Icon::get_svg( 'video', '', [ 'aria-hidden' => 'true' ] );
break;
case 'audio':
$post_format_icon = \Blogsy\Icon::get_svg( 'audio', '', [ 'aria-hidden' => 'true' ] );
break;
case 'link':
$post_format_icon = \Blogsy\Icon::get_svg( 'link', '', [ 'aria-hidden' => 'true' ] );
break;
case 'quote':
$post_format_icon = \Blogsy\Icon::get_svg( 'quote', '', [ 'aria-hidden' => 'true' ] );
break;
default:
$post_format_icon = \Blogsy\Icon::get_svg( 'gallery', '', [ 'aria-hidden' => 'true' ] );
}
?>
999 ) {
$count = substr( $count, 0, -2 ) / 10 . 'K';
}
return $count;
}
}
/**
* Get the post excerpt with a specific length.
*
* @since 1.0.0
*
* @param int $length Length of excerpt.
* @return string The post excerpt.
*/
function blogsy_get_the_excerpt( int $length = 100 ): string {
$excerpt = get_the_excerpt();
if ( $excerpt ) {
$excerpt_more = Helper::get_option( 'excerpt_more' );
$excerpt = wp_strip_all_tags( $excerpt );
$excerpt = str_replace( '[…]', '', $excerpt );
$excerpt = trim( $excerpt );
if ( strlen( $excerpt ) > $length ) {
$excerpt = function_exists( 'mb_substr' ) ? mb_substr( $excerpt, 0, $length ) : substr( $excerpt, 0, $length );
if ( strpos( $excerpt, ' ' ) ) {
$excerpt = substr( $excerpt, 0, strrpos( $excerpt, ' ' ) );
}
$excerpt .= $excerpt_more;
}
}
return $excerpt;
}
/**
* Display no posts found message
*
* @since 1.0.0
*/
function blogsy_query_not_found_msg(): void {
?>
*
* @since 1.0.0
* @return Plugin_Utilities
*/
function blogsy_plugin_utilities(): Plugin_Utilities {
return Plugin_Utilities::instance();
}
/**
* The function which returns the one Dynamic_Styles instance.
*
* Use this function like you would a global variable, except without needing
* to declare the global.
*
* Example:
*
* @since 1.0.0
* @return Dynamic_Styles
*/
function blogsy_dynamic_styles(): Dynamic_Styles {
return Dynamic_Styles::instance();
}
/**
* Add classes to Top Bar.
*
* @param array $classes Classes array.
* @since 1.0.0
*/
function blogsy_top_bar_classes( array $classes = [] ): void {
// Top Bar visibility.
$top_bar_visibility = Helper::get_option( 'top_bar_visibility' );
if ( 'all' !== $top_bar_visibility ) {
$classes[] = 'blogsy-' . $top_bar_visibility;
}
$classes = apply_filters( 'blogsy_top_bar_classes', $classes );
if ( ! empty( $classes ) ) {
$classes = trim( implode( ' ', $classes ) );
echo esc_attr( $classes );
}
}
/**
* Add classes to Hero.
*
* @param array $classes Classes array.
* @since 1.0.0
*/
function blogsy_hero_classes( array $classes = [] ): void {
// Hero visibility.
$visibility = Helper::get_option( 'hero_visibility' );
if ( 'all' !== $visibility ) {
$classes[] = 'blogsy-' . $visibility;
}
$classes = apply_filters( 'blogsy_hero_classes', $classes );
if ( ! empty( $classes ) ) {
$classes = trim( implode( ' ', $classes ) );
echo 'class="' . esc_attr( $classes ) . '"';
}
}
/**
* Get Hero Data.
*
* Moves hero business logic out of templates so templates only render data.
*
* @since 1.0.0
* @return array|null
*/
function blogsy_get_hero_data(): ?array {
if ( ! blogsy_is_hero_displayed() ) {
return null;
}
$hero_type = Helper::get_option( 'hero_type' );
$hero_page_id = Helper::get_option( 'hero_page' );
// If a page is selected for the hero, return only page id.
if ( $hero_page_id ) {
return [
'type' => 'page',
'page_id' => (int) $hero_page_id,
];
}
$hero_slider_orderby = Helper::get_option( 'hero_slider_orderby' );
$hero_slider_order = explode( '-', $hero_slider_orderby );
$query_args = [
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => Helper::get_option( 'hero_slider_post_number' ), // phpcs:ignore WordPress.WP.PostsPerPage.posts_per_page_posts_per_page
'order' => $hero_slider_order[1] ?? 'DESC',
'orderby' => $hero_slider_order[0] ?? 'date',
'ignore_sticky_posts' => true,
];
$hero_categories = Helper::get_option( 'hero_slider_category' );
$hero_tags = Helper::get_option( 'hero_slider_tags' );
// Initialize the tax_query with 'OR' relation.
$tax_query = [ 'relation' => 'OR' ];
if ( ! empty( $hero_categories ) ) {
$tax_query[] = [
'taxonomy' => 'category',
'field' => 'slug',
'terms' => $hero_categories,
'operator' => 'IN',
];
}
if ( ! empty( $hero_tags ) ) {
$tax_query[] = [
'taxonomy' => 'post_tag',
'field' => 'slug',
'terms' => $hero_tags,
'operator' => 'IN',
];
}
$query_args['tax_query'] = $tax_query;
$query_args = apply_filters( 'blogsy_hero_slider_query_args', $query_args );
// Elements and other rendering options.
$elements = (array) Helper::get_option( 'hero_slider_elements' );
// Default slider settings (can be filtered).
$slider_settings = apply_filters(
'blogsy_hero_slider_settings',
[
'autoplay' => [ 'delay' => 4000 ],
'loop' => true,
'speed' => 1000,
'effect' => 'fade',
'parallax' => true,
'loopedSlides' => 6,
'touchRatio' => 0.2,
'navigation' => [
'nextEl' => '#blogsy-hero .carousel-nav-next',
'prevEl' => '#blogsy-hero .carousel-nav-prev',
],
'pagination' => [
'el' => '#blogsy-hero .carousel-pagination',
'type' => 'bullets',
'clickable' => true,
'dynamicBullets' => false,
],
'a11y' => [ 'enabled' => false ],
'fadeEffect' => [ 'crossFade' => true ],
]
);
// Default thumbs slider settings (can be filtered).
$thumbs_slider_settings = apply_filters(
'blogsy_hero_thumbs_slider_settings',
[
'loop' => true,
'speed' => 1000,
'slideToClickedSlide' => true,
'direction' => 'horizontal',
'touchRatio' => 0.2,
'spaceBetween' => 10,
'loopedSlides' => 6,
'slidesPerView' => 3,
'breakpoints' => [
'0' => [
'spaceBetween' => 7,
],
'1025' => [
'spaceBetween' => 10,
],
],
]
);
return [
'type' => $hero_type ?: 'one',
'query_args' => $query_args,
'elements' => $elements,
'slider_settings' => $slider_settings,
'thumbs_slider_settings' => $thumbs_slider_settings,
];
}
/**
* Add classes to Ticker News.
*
* @param array $classes Classes array.
* @since 1.0.0
*/
function blogsy_ticker_classes( array $classes = [] ): void {
// Ticker News visibility.
$visibility = Helper::get_option( 'ticker_visibility' );
if ( 'all' !== $visibility ) {
$classes[] = 'blogsy-' . $visibility;
}
$classes = apply_filters( 'blogsy_ticker_classes', $classes );
if ( ! empty( $classes ) ) {
$classes = trim( implode( ' ', $classes ) );
echo 'class="' . esc_attr( $classes ) . '"';
}
}
/**
* Add classes to Featured category.
*
* @param array $classes Classes array.
* @since 1.0.0
*/
function blogsy_featured_category_classes( array $classes = [] ): void {
// Hero visibility.
$visibility = Helper::get_option( 'featured_category_visibility' );
if ( 'all' !== $visibility ) {
$classes[] = 'blogsy-' . $visibility;
}
$classes = apply_filters( 'blogsy_featured_category_classes', $classes );
if ( ! empty( $classes ) ) {
$classes = trim( implode( ' ', $classes ) );
echo 'class="' . esc_attr( $classes ) . '"';
}
}
/**
* Get Featured Category Data.
*
* @since 1.0.0
* @return array
*/
function blogsy_get_featured_category_data(): ?array {
if ( ! blogsy_is_featured_category_displayed() ) {
return null;
}
$style = \Blogsy\Helper::get_option( 'featured_category_style' );
$column = \Blogsy\Helper::get_option( 'featured_category_column' );
$title = \Blogsy\Helper::get_option( 'featured_category_title' );
$categories = \Blogsy\Helper::get_option( 'featured_category' );
if ( empty( $categories ) ) {
return null;
}
$features = [];
foreach ( $categories as $cat ) {
if ( empty( $cat['category'] ) ) {
continue;
}
$features[] = [
'category' => $cat['category'],
'image' => $cat['image'],
'color' => $cat['color'] ?? \Blogsy\Helper::get_option( 'accent_color' ),
];
}
return [
'style' => $style,
'column' => $column,
'title' => $title,
'features' => $features,
];
}
/**
* Add classes to Featured links.
*
* @param array $classes Classes array.
* @since 1.0.0
*/
function blogsy_featured_links_classes( array $classes = [] ): void {
// Hero visibility.
$visibility = Helper::get_option( 'featured_links_visibility' );
if ( 'all' !== $visibility ) {
$classes[] = 'blogsy-' . $visibility;
}
$classes = apply_filters( 'blogsy_featured_links_classes', $classes );
if ( ! empty( $classes ) ) {
$classes = trim( implode( ' ', $classes ) );
echo 'class="' . esc_attr( $classes ) . '"';
}
}
/**
* Get Featured Links Data.
*
* @since 1.0.0
*/
function blogsy_get_featured_links_data(): ?array {
if ( ! blogsy_is_featured_links_displayed() ) {
return null;
}
// Featured links type.
$style = \Blogsy\Helper::get_option( 'featured_links_style' );
$column = \Blogsy\Helper::get_option( 'featured_links_column' );
$title = \Blogsy\Helper::get_option( 'featured_links_title' );
$links = \Blogsy\Helper::get_option( 'featured_links' );
// No items found.
if ( ! $links ) {
return null;
}
$features = [];
foreach ( $links as $link ) {
$features[] = [
'link' => $link['link'],
'image' => $link['image'],
'color' => $link['color'] ?? \Blogsy\Helper::get_option( 'accent_color' ),
];
}
return [
'style' => $style,
'column' => $column,
'title' => $title,
'features' => $features,
];
}
/**
* Add classes to Stories.
*
* @param array $classes Classes array.
* @since 1.0.0
*/
function blogsy_stories_classes( array $classes = [] ): void {
// Stories visibility.
$visibility = Helper::get_option( 'stories_visibility' );
if ( 'all' !== $visibility ) {
$classes[] = 'blogsy-' . $visibility;
}
$classes = apply_filters( 'blogsy_stories_classes', $classes );
if ( ! empty( $classes ) ) {
$classes = trim( implode( ' ', $classes ) );
echo 'class="' . esc_attr( $classes ) . '"';
}
}
/**
* Get Stories Data.
*
* @since 1.0.0
*/
function blogsy_get_stories_data(): ?array {
if ( ! blogsy_is_stories_displayed() && ! is_page_template( 'stories.php' ) ) {
return null;
}
$stories_title = Helper::get_option( 'stories_title' );
$stories_view_all = Helper::get_option( 'stories_view_all' );
$stories_style = Helper::get_option( 'stories_style' );
$stories_orderby = explode( '-', Helper::get_option( 'stories_orderby' ) );
$stories_max_category = Helper::get_option( 'stories_max_category' );
$stories_max_inner_items = Helper::get_option( 'stories_max_inner_items' );
$stories_categories = Helper::get_option( 'stories_category' );
$stories_elements = Helper::get_option( 'stories_elements' );
$categories = get_categories(
[
'number' => absint( $stories_max_category ),
'slug' => ( ! empty( $stories_categories ) ) ? $stories_categories : [],
]
);
return [
'title' => $stories_title,
'view_all' => $stories_view_all,
'style' => $stories_style,
'categories' => $categories,
'max_category' => absint( $stories_max_category ),
'max_inner_items' => absint( $stories_max_inner_items ),
'orderby' => $stories_orderby[0],
'order' => $stories_orderby[1],
'elements' => $stories_elements,
];
}
/**
* Add classes to PYML.
*
* @param array $classes Classes array.
* @since 1.0.0
*/
function blogsy_pyml_classes( array $classes = [] ): void {
// Pyml visibility.
$visibility = Helper::get_option( 'pyml_visibility' );
if ( 'all' !== $visibility ) {
$classes[] = 'blogsy-' . $visibility;
}
$classes = apply_filters( 'blogsy_pyml_classes', $classes );
if ( ! empty( $classes ) ) {
$classes = trim( implode( ' ', $classes ) );
echo 'class="' . esc_attr( $classes ) . '"';
}
}
/**
* Get PYML Data.
*
* @since 1.0.0
*/
function blogsy_get_pyml_data(): ?array {
if ( ! blogsy_is_pyml_displayed() ) {
return null;
}
$pyml_title = Helper::get_option( 'pyml_title' );
$pyml_style = Helper::get_option( 'pyml_style' );
$pyml_orderby = explode( '-', Helper::get_option( 'pyml_orderby' ) );
$pyml_post_number = Helper::get_option( 'pyml_post_number' );
$pyml_categories = Helper::get_option( 'pyml_category' );
$pyml_tags = Helper::get_option( 'pyml_tags' );
$pyml_elements = Helper::get_option( 'pyml_elements' );
$pyml_query_args = [
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => $pyml_post_number,
'order' => $pyml_orderby[1],
'orderby' => $pyml_orderby[0],
'ignore_sticky_posts' => true,
];
// Initialize the tax_query with 'OR' relation.
$tax_query = [
'relation' => 'OR', // This creates the "OR" condition.
];
// If categories are specified.
if ( ! empty( $pyml_categories ) ) {
$tax_query[] = [
'taxonomy' => 'category',
'field' => 'slug', // You can use 'name' or 'id' too.
'terms' => $pyml_categories,
'operator' => 'IN',
];
}
// If tags are specified.
if ( ! empty( $pyml_tags ) ) {
$tax_query[] = [
'taxonomy' => 'post_tag',
'field' => 'slug', // You can use 'name' or 'id' too.
'terms' => $pyml_tags,
'operator' => 'IN',
];
}
// Add the tax_query to the arguments.
$pyml_query_args['tax_query'] = $tax_query;
$pyml_query_args = apply_filters( 'blogsy_pyml_query_args', $pyml_query_args );
return [
'title' => $pyml_title,
'style' => $pyml_style,
'query_args' => $pyml_query_args,
'elements' => $pyml_elements,
'slider_settings' => apply_filters(
'blogsy_pyml_slider_settings',
[
'autoplay' => [ 'delay' => 4000 ],
'loop' => true,
'speed' => 500,
'slidesPerView' => 4,
'slidesPerGroup' => 1,
'spaceBetween' => 20,
'centeredSlides' => true,
'effect' => 'slide',
'autoHeight' => true,
'direction' => 'horizontal',
'breakpoints' => [
'0' => [
'slidesPerView' => 1.2,
'spaceBetween' => 10,
],
'768' => [ 'slidesPerView' => 2 ],
'1025' => [
'slidesPerView' => 4,
'slidesPerGroup' => 1,
'spaceBetween' => 30,
],
],
'navigation' => [
'nextEl' => '#blogsy-pyml .carousel-nav-next',
'prevEl' => '#blogsy-pyml .carousel-nav-prev',
],
'pagination' => [
'el' => '#blogsy-pyml .carousel-pagination',
'type' => 'fraction',
'clickable' => true,
'dynamicBullets' => false,
],
'a11y' => [ 'enabled' => false ],
'fadeEffect' => [ 'crossFade' => true ],
]
),
];
}
/**
* Get Post Categories.
*
* @since 1.0.0
*/
function blogsy_get_post_categories(): array {
$categories = get_categories(
[
'hide_empty' => true,
]
);
$cat_array = [];
if ( ! empty( $categories ) && ! is_wp_error( $categories ) ) {
foreach ( $categories as $category ) {
$cat_array[ $category->term_id ] = $category->name;
}
}
return $cat_array;
}
/**
* Algorithm to push ads into archive
*
* @since 1.0.0
*/
if ( ! function_exists( 'blogsy_algorithm_to_push_ads_in_archive' ) ) :
/**
* Algorithm to push ads into archive
*
* @since 1.0.0
*/
function blogsy_algorithm_to_push_ads_in_archive() {
global $wp_query;
$ad_widgets = array_filter(
(array) Helper::get_option( 'ad_widgets' ),
fn( array $widget ): bool => isset( $widget['values']['display_area'] ) && in_array( 'random_post_archives', $widget['values']['display_area'], true )
);
$archive_ads_number = count( $ad_widgets );
if ( $archive_ads_number <= 0 || ! is_numeric( $archive_ads_number ) ) {
return false;
}
$max_number_of_pages = absint( $wp_query->max_num_pages );
$paged = absint( ( 0 === get_query_var( 'paged' ) ) ? 0 : ( get_query_var( 'paged' ) - 1 ) );
$count = 1;
$ads_id = 0;
$loop_var = 0;
for ( $i = $archive_ads_number; $i > 0; $i-- ) :
if ( $count <= $max_number_of_pages ) :
$ads_to_render_in_a_single_page = ceil( $i / $max_number_of_pages );
$ads_to_render_by_page[] = ceil( $i / $max_number_of_pages );
$ads_to_render = [];
if ( $ads_to_render_in_a_single_page > 1 ) :
$to_loop = $ads_id + $ads_to_render_in_a_single_page;
for ( $j = $ads_id; $j < $to_loop; $j++ ) :
if ( ! in_array( $ads_id, $ads_to_render ) ) {
$ads_to_render[] = $ads_id;
}
++$ads_id;
endfor;
$ads_to_render_in_current_page[ $loop_var ] = $ads_to_render;
else :
$ads_to_render_in_current_page[ $loop_var ] = $ads_id;
++$ads_id;
endif;
++$count;
++$loop_var;
endif;
endfor;
$current_page_count = absint( $wp_query->post_count );
$ads_of_current_page = $ads_to_render_in_current_page[ $paged ] ?? null;
$ads_count = is_array( $ads_of_current_page ) ? count( $ads_of_current_page ) : 1;
$random_numbers = [];
for ( $i = 0; $i < $ads_count; $i++ ) :
$random_numbers[] = wp_rand( 0, ( $current_page_count - 1 ) );
endfor;
return [
'random_numbers' => $random_numbers,
'ads_to_render' => $ads_of_current_page,
];
}
endif;
/**
* Get all the registered image sizes along with their dimensions.
*
* @since 1.0.0
* @return array $image_sizes The image sizes
*/
function blogsy_get_image_sizes(): array {
global $_wp_additional_image_sizes;
$default_image_sizes = get_intermediate_image_sizes();
foreach ( $default_image_sizes as $size ) {
$image_sizes[ $size ]['width'] = intval( get_option( $size . '_size_w' ) );
$image_sizes[ $size ]['height'] = intval( get_option( $size . '_size_h' ) );
$image_sizes[ $size ]['crop'] = get_option( $size . '_crop' ) ?: false;
}
if ( isset( $_wp_additional_image_sizes ) && count( $_wp_additional_image_sizes ) ) {
$image_sizes = array_merge( $image_sizes, $_wp_additional_image_sizes );
}
$image_sizes['full'] = [
'width' => '',
'height' => '',
'crop' => '',
];
return $image_sizes;
}
/**
* Exclude Hero Slider and PYML posts from main query
*
* @since 1.1.0
* @param WP_Query $query The WP_Query instance (passed by reference).
*/
function blogsy_exclude_slider_and_pyml_posts_from_index( WP_Query $query ): void {
if (
! is_admin() &&
$query->is_main_query() &&
( $query->is_home() || $query->is_archive() )
) {
$exclude_ids = [];
// Check if Hero Slider is enabled and visible.
if (
( ! empty( Helper::get_option( 'hero_slider_category' ) ) || ! empty( Helper::get_option( 'hero_slider_tags' ) ) ) &&
function_exists( 'blogsy_is_hero_displayed' ) &&
blogsy_is_hero_displayed()
) {
$slider_post_ids = get_transient( 'blogsy_hero_slider_post_ids' );
if ( ! empty( $slider_post_ids ) && is_array( $slider_post_ids ) ) {
$exclude_ids = array_merge( $exclude_ids, $slider_post_ids );
}
}
// Check if PYML is enabled and visible.
if (
( ! empty( Helper::get_option( 'pyml_category' ) ) || ! empty( Helper::get_option( 'pyml_tags' ) ) ) &&
function_exists( 'blogsy_is_pyml_displayed' ) &&
blogsy_is_pyml_displayed()
) {
$pyml_post_ids = get_transient( 'blogsy_pyml_post_ids' );
if ( ! empty( $pyml_post_ids ) && is_array( $pyml_post_ids ) ) {
$exclude_ids = array_merge( $exclude_ids, $pyml_post_ids );
}
}
if ( [] !== $exclude_ids ) {
// Remove duplicates just in case.
$exclude_ids = array_unique( $exclude_ids );
$query->set( 'post__not_in', $exclude_ids );
}
}
}
add_action( 'pre_get_posts', 'blogsy_exclude_slider_and_pyml_posts_from_index' );