is_main_query() ) { return; } if ( ! $query->is_archive || ! $query->is_category ) { return; } $args = array( 'post_type' => 'fl-theme-layout', 'post_status' => 'publish', 'fields' => 'ids', 'meta_query' => array( 'relation' => 'OR', array( 'key' => '_fl_theme_builder_locations', 'value' => 'general:site', 'compare' => 'LIKE', ), array( 'key' => '_fl_theme_builder_locations', 'value' => 'taxonomy:category', 'compare' => 'LIKE', ), array( 'key' => '_fl_theme_builder_locations', 'value' => 'general:archive', 'compare' => 'LIKE', ), ), ); $post_grid = null; $object = null; $exclusions = array(); if ( $query->get( 'cat' ) ) { $term = get_term( $query->get( 'cat' ), 'category' ); } elseif ( $query->get( 'category_name' ) ) { $term = get_term_by( 'slug', $query->get( 'category_name' ), 'category' ); } if ( ! empty( $term ) && ! is_wp_error( $term ) ) { $term_id = (int) $term->term_id; $object = 'taxonomy:category:' . $term_id; $args['meta_query'][] = array( 'key' => '_fl_theme_builder_locations', 'value' => $object, 'compare' => 'LIKE', ); } $layout_query = new WP_Query( $args ); if ( $layout_query->post_count > 0 ) { foreach ( $layout_query->posts as $i => $post_id ) { $exclusions = FLThemeBuilderRulesLocation::get_saved_exclusions( $post_id ); $exclude = false; if ( $object && in_array( $object, $exclusions ) ) { $exclude = true; } elseif ( in_array( 'taxonomy:category', $exclusions ) ) { $exclude = true; } elseif ( in_array( 'general:archive', $exclusions ) ) { $exclude = true; } if ( ! $exclude ) { $data = FLBuilderModel::get_layout_data( 'published', $post_id ); if ( ! empty( $data ) ) { foreach ( $data as $node_id => $node ) { if ( 'module' != $node->type ) { continue; } if ( ! isset( $node->settings->type ) || 'post-grid' != $node->settings->type ) { continue; } // Check for `post-grid` with custom query source. if ( 'custom_query' == $node->settings->data_source ) { $post_grid = FLBuilderLoop::custom_query( $node->settings ); break; } } } } if ( $post_grid ) { break; } } } return $post_grid; } /** * Fix canonical for singular layout with post-grid module pagination. * @since 2.4 */ function fl_theme_builder_has_post_grid() { if ( ! class_exists( 'FLThemeBuilder' ) ) { return false; } if ( ! FLThemeBuilder::has_layout() ) { return false; } $layout_ids = array(); // Checks themer layout $header = FLThemeBuilderLayoutData::get_current_page_layout_ids( 'header' ); if ( ! empty( $header ) ) { $layout_ids[] = $header[0]; } $single = FLThemeBuilderLayoutData::get_current_page_layout_ids( 'singular' ); if ( ! empty( $single ) ) { $layout_ids[] = $single[0]; } $footer = FLThemeBuilderLayoutData::get_current_page_layout_ids( 'footer' ); if ( ! empty( $footer ) ) { $layout_ids[] = $footer[0]; } $parts = FLThemeBuilderLayoutData::get_current_page_layout_ids( 'part' ); if ( ! empty( $parts ) ) { $layout_ids = array_merge( $layout_ids, $parts ); } if ( empty( $layout_ids ) ) { return false; } foreach ( $layout_ids as $layout_id ) { $data = FLBuilderModel::get_layout_data( 'published', $layout_id ); foreach ( $data as $node_id => $node ) { if ( 'module' != $node->type ) { continue; } if ( isset( $node->settings->type ) && 'post-grid' == $node->settings->type ) { return true; } } } return false; }