is_main_query() ) { return; } if ( ! $query->is_post_type_archive( 'sg7g_media' ) && ! $query->is_tax( array( 'sg7g_category', 'sg7g_tag' ) ) ) { return; } $query->set( 'post_type', 'sg7g_media' ); $query->set( 'post_status', 'publish' ); $query->set( 'has_password', false ); $query->set( 'posts_per_page', (int) SG7G_Settings::get( 'posts_per_page', 12 ) ); $query->set( 'ignore_sticky_posts', true ); self::apply_sorting( $query, SG7G_Archive_UI::request_sort() ); $search_term = SG7G_Search::request_term(); if ( '' !== $search_term ) { $query->set( 'sg7g_search_term', $search_term ); } $media_type = SG7G_Archive_UI::request_type(); if ( '' !== $media_type ) { $meta_query = (array) $query->get( 'meta_query', array() ); $meta_query[] = array( 'key' => '_sg7g_media_type', 'value' => $media_type, ); $query->set( 'meta_query', $meta_query ); } $category = SG7G_Archive_UI::request_category(); if ( $category > 0 && ! $query->is_tax( 'sg7g_category' ) && term_exists( $category, 'sg7g_category' ) ) { $tax_query = (array) $query->get( 'tax_query', array() ); $tax_query[] = array( 'taxonomy' => 'sg7g_category', 'field' => 'term_id', 'terms' => array( $category ), ); $query->set( 'tax_query', $tax_query ); } $year = SG7G_Archive_UI::request_year(); if ( $year > 0 ) { $date_query = (array) $query->get( 'date_query', array() ); $date_query[] = array( 'year' => $year ); $query->set( 'date_query', $date_query ); } } public static function apply_sorting( WP_Query $query, string $sort ): void { switch ( $sort ) { case 'oldest': $query->set( 'orderby', 'date' ); $query->set( 'order', 'ASC' ); break; case 'views': $query->set( 'meta_key', '_sg7g_views' ); $query->set( 'orderby', array( 'meta_value_num' => 'DESC', 'date' => 'DESC' ) ); $query->set( 'order', 'DESC' ); break; case 'likes': // Likes are counted from the interaction table at query time; // never sort by a denormalized post-meta cache. $query->set( 'sg7g_live_likes_sort', true ); $query->set( 'orderby', 'date' ); $query->set( 'order', 'DESC' ); break; case 'newest': default: $query->set( 'orderby', 'date' ); $query->set( 'order', (string) SG7G_Settings::get( 'sort_order', 'DESC' ) ); break; } } }