| @@ -173,8 +173,9 @@ | ||
| 173 | 173 | $this->add_group_control( |
| 174 | 174 | Group_Control_Image_Size::get_type(), |
| 175 | 175 | [ |
| 176 | 176 | 'name' => 'primary_thumbnail', |
| 177 | + // phpcs:ignore WordPressVIPMinimum.Performance.WPQueryParams.PostNotIn_exclude -- Elementor widget query built from user-configured controls; expected behaviour. | |
| 177 | 178 | 'exclude' => ['custom'], |
| 178 | 179 | 'default' => 'thumbnail', |
| 179 | 180 | 'condition' => [ |
| 180 | 181 | 'show_image' => 'yes' |
| @@ -258,8 +259,11 @@ | ||
| 258 | 259 | ], |
| 259 | 260 | 'default' => [ |
| 260 | 261 | 'size' => 4, |
| 261 | 262 | ], |
| 263 | + 'condition' => [ | |
| 264 | + 'posts_source!' => 'current_query', | |
| 265 | + ] | |
| 262 | 266 | ] |
| 263 | 267 | ); |
| 264 | 268 | |
| 265 | 269 | $this->register_query_builder_controls(); |
| @@ -757,21 +761,33 @@ | ||
| 757 | 761 | $this->register_ajax_loadmore_style_controls(); |
| 758 | 762 | } |
| 759 | 763 | |
| 760 | 764 | /** |
| 761 | - * Main query render for this widget | |
| 762 | - * @param $posts_per_page number item query limit | |
| 765 | + * Get post query builder arguments | |
| 763 | 766 | */ |
| 764 | - public function query_posts($posts_per_page) { | |
| 767 | + public function query_posts( $posts_per_page ) { | |
| 768 | + $settings = $this->get_settings(); | |
| 769 | + $posts_per_page = isset( $posts_per_page ) ? (int) $posts_per_page : 0; | |
| 770 | + $args = $this->getGroupControlQueryArgs(); | |
| 771 | + $is_current_query = ( ! empty( $settings['posts_source'] ) && $settings['posts_source'] === 'current_query' ); | |
| 765 | 772 | |
| 766 | - $default = $this->getGroupControlQueryArgs(); | |
| 767 | - $args = []; | |
| 768 | - if ($posts_per_page) { | |
| 773 | + if ( $is_current_query ) { | |
| 774 | + unset( $args['offset'] ); | |
| 775 | + unset( $args['no_found_rows'] ); | |
| 776 | + $posts_per_page = 0; | |
| 777 | + } | |
| 778 | + | |
| 779 | + if ( $posts_per_page > 0 ) { | |
| 769 | 780 | $args['posts_per_page'] = $posts_per_page; |
| 770 | - $args['paged'] = max(1, get_query_var('paged'), get_query_var('page')); | |
| 781 | + } else { | |
| 782 | + $args['posts_per_page'] = (int) get_option( 'posts_per_page', 10 ); | |
| 771 | 783 | } |
| 772 | - $args = array_merge($default, $args); | |
| 773 | - $this->_query = new WP_Query($args); | |
| 784 | + | |
| 785 | + if ( $settings['show_pagination'] ) { | |
| 786 | + $args['paged'] = max( 1, (int) get_query_var( 'paged' ), (int) get_query_var( 'page' ) ); | |
| 787 | + } | |
| 788 | + | |
| 789 | + $this->_query = new \WP_Query( $args ); | |
| 774 | 790 | } |
| 775 | 791 | |
| 776 | 792 | public function render_post_grid_item($post_id, $image_size) { |
| 777 | 793 | $settings = $this->get_settings_for_display(); |