From fc793be83ce772729fa846172662e16720218d6e Mon Sep 17 00:00:00 2001 From: Oscar Sanchez Date: Tue, 3 Aug 2021 01:51:08 -0500 Subject: [PATCH 1/7] Sort children terms correctly if order is set to count --- includes/classes/Feature/Facets/Widget.php | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/includes/classes/Feature/Facets/Widget.php b/includes/classes/Feature/Facets/Widget.php index 45e76fed40..b08d07e1d9 100644 --- a/includes/classes/Feature/Facets/Widget.php +++ b/includes/classes/Feature/Facets/Widget.php @@ -217,7 +217,7 @@ public function widget( $args, $instance ) { $flat_ordered_terms[] = $top_of_tree; - $to_process = $this->order_by_selected( $top_of_tree->children, $selected_filters['taxonomies'][ $taxonomy ]['terms'] ); + $to_process = $this->order_by_selected( $top_of_tree->children, $selected_filters['taxonomies'][ $taxonomy ]['terms'], $order, $orderby ); while ( ! empty( $to_process ) ) { $term = array_shift( $to_process ); @@ -225,7 +225,7 @@ public function widget( $args, $instance ) { $flat_ordered_terms[] = $term; if ( ! empty( $term->children ) ) { - $to_process = array_merge( $this->order_by_selected( $term->children, $selected_filters['taxonomies'][ $taxonomy ]['terms'] ), $to_process ); + $to_process = array_merge( $this->order_by_selected( $term->children, $selected_filters['taxonomies'][ $taxonomy ]['terms'] ), $to_process, $order, $orderby ); } } @@ -318,10 +318,12 @@ public function widget( $args, $instance ) { * * @param array $terms Array of terms * @param array $selected_terms Selected terms + * @param string $order The order to sort from. Desc or Asc. + * @param string $orderby The orderby to sort items from. * @since 2.5 * @return array */ - private function order_by_selected( $terms, $selected_terms ) { + private function order_by_selected( $terms, $selected_terms, $order = false, $orderby = false ) { $ordered_terms = []; $terms_by_slug = []; @@ -332,7 +334,7 @@ private function order_by_selected( $terms, $selected_terms ) { ksort( $selected_terms ); ksort( $terms_by_slug ); - foreach ( $selected_terms as $term_slug => $nothing ) { + foreach ( $selected_terms as $term_slug ) { if ( ! empty( $terms_by_slug[ $term_slug ] ) ) { $ordered_terms[ $term_slug ] = $terms_by_slug[ $term_slug ]; } @@ -344,6 +346,18 @@ private function order_by_selected( $terms, $selected_terms ) { } } + if ( 'count' === $orderby ) { + if ( 'asc' === $order ) { + uasort( $ordered_terms, function( $a, $b ) { + return $a > $b; + } ); + } else { + uasort( $ordered_terms, function( $a, $b ) { + return $a < $b; + } ); + } + } + return array_values( $ordered_terms ); } From 9e54581ea3e34d300362f6519770da6710a46292 Mon Sep 17 00:00:00 2001 From: Oscar Sanchez Date: Tue, 3 Aug 2021 10:53:39 -0500 Subject: [PATCH 2/7] Resolve linting problems --- includes/classes/Feature/Facets/Widget.php | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/includes/classes/Feature/Facets/Widget.php b/includes/classes/Feature/Facets/Widget.php index b08d07e1d9..279cfc7e30 100644 --- a/includes/classes/Feature/Facets/Widget.php +++ b/includes/classes/Feature/Facets/Widget.php @@ -316,8 +316,8 @@ public function widget( $args, $instance ) { /** * Order terms putting selected at the top * - * @param array $terms Array of terms - * @param array $selected_terms Selected terms + * @param array $terms Array of terms + * @param array $selected_terms Selected terms * @param string $order The order to sort from. Desc or Asc. * @param string $orderby The orderby to sort items from. * @since 2.5 @@ -348,13 +348,19 @@ private function order_by_selected( $terms, $selected_terms, $order = false, $or if ( 'count' === $orderby ) { if ( 'asc' === $order ) { - uasort( $ordered_terms, function( $a, $b ) { - return $a > $b; - } ); + uasort( + $ordered_terms, + function( $a, $b ) { + return $a > $b; + } + ); } else { - uasort( $ordered_terms, function( $a, $b ) { - return $a < $b; - } ); + uasort( + $ordered_terms, + function( $a, $b ) { + return $a < $b; + } + ); } } From 146aceadfc2e1121efa7d9f78f4caf2c715a8116 Mon Sep 17 00:00:00 2001 From: Oscar Sanchez Date: Tue, 3 Aug 2021 11:05:53 -0500 Subject: [PATCH 3/7] Sort by count --- includes/classes/Feature/Facets/Widget.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/classes/Feature/Facets/Widget.php b/includes/classes/Feature/Facets/Widget.php index 279cfc7e30..f86df0394f 100644 --- a/includes/classes/Feature/Facets/Widget.php +++ b/includes/classes/Feature/Facets/Widget.php @@ -351,14 +351,14 @@ private function order_by_selected( $terms, $selected_terms, $order = false, $or uasort( $ordered_terms, function( $a, $b ) { - return $a > $b; + return $a->count > $b->count; } ); } else { uasort( $ordered_terms, function( $a, $b ) { - return $a < $b; + return $a->count < $b->count; } ); } From 1b2c0a0928b0ac49d5533b579e4b56c0bc9b17c1 Mon Sep 17 00:00:00 2001 From: Oscar Sanchez Date: Tue, 17 Aug 2021 09:31:28 -0500 Subject: [PATCH 4/7] Account for term name ordering --- includes/classes/Feature/Facets/Widget.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/includes/classes/Feature/Facets/Widget.php b/includes/classes/Feature/Facets/Widget.php index f86df0394f..b79c7b5a8a 100644 --- a/includes/classes/Feature/Facets/Widget.php +++ b/includes/classes/Feature/Facets/Widget.php @@ -331,9 +331,6 @@ private function order_by_selected( $terms, $selected_terms, $order = false, $or $terms_by_slug[ $term->slug ] = $term; } - ksort( $selected_terms ); - ksort( $terms_by_slug ); - foreach ( $selected_terms as $term_slug ) { if ( ! empty( $terms_by_slug[ $term_slug ] ) ) { $ordered_terms[ $term_slug ] = $terms_by_slug[ $term_slug ]; @@ -362,6 +359,12 @@ function( $a, $b ) { } ); } + } else { + if ( 'asc' === $order ) { + krsort( $ordered_terms ); + } else { + ksort( $ordered_terms ); + } } return array_values( $ordered_terms ); From d950c4bab0ca5eda49cdfe78a334d182090c22ea Mon Sep 17 00:00:00 2001 From: Oscar Sanchez Date: Tue, 17 Aug 2021 20:41:19 -0500 Subject: [PATCH 5/7] Fixes correct order --- includes/classes/Feature/Facets/Widget.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/classes/Feature/Facets/Widget.php b/includes/classes/Feature/Facets/Widget.php index b79c7b5a8a..cdeab817cc 100644 --- a/includes/classes/Feature/Facets/Widget.php +++ b/includes/classes/Feature/Facets/Widget.php @@ -361,9 +361,9 @@ function( $a, $b ) { } } else { if ( 'asc' === $order ) { - krsort( $ordered_terms ); - } else { ksort( $ordered_terms ); + } else { + krsort( $ordered_terms ); } } From cb8a6584a79fc81065aa144f64e960ec124691b7 Mon Sep 17 00:00:00 2001 From: Oscar Sanchez Date: Sun, 22 Aug 2021 23:48:29 -0500 Subject: [PATCH 6/7] Remove unused variable --- includes/classes/Feature/Facets/Widget.php | 1 - 1 file changed, 1 deletion(-) diff --git a/includes/classes/Feature/Facets/Widget.php b/includes/classes/Feature/Facets/Widget.php index cdeab817cc..97e1916dac 100644 --- a/includes/classes/Feature/Facets/Widget.php +++ b/includes/classes/Feature/Facets/Widget.php @@ -135,7 +135,6 @@ public function widget( $args, $instance ) { $order = isset( $instance['order'] ) ? $instance['order'] : 'count'; $terms = Utils\get_term_tree( $terms, $orderby, $order, true ); - $term_tree = Utils\get_term_tree( $terms, 'count', 'desc', false ); $outputted_terms = array(); From d8ba78992d41998922dadb29e9e0fafa9e0740c1 Mon Sep 17 00:00:00 2001 From: Oscar Sanchez Date: Mon, 23 Aug 2021 00:58:02 -0500 Subject: [PATCH 7/7] Fixes array_merge bug with taxonomy childrens --- includes/classes/Feature/Facets/Widget.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/classes/Feature/Facets/Widget.php b/includes/classes/Feature/Facets/Widget.php index 97e1916dac..5afc451aa9 100644 --- a/includes/classes/Feature/Facets/Widget.php +++ b/includes/classes/Feature/Facets/Widget.php @@ -224,7 +224,7 @@ public function widget( $args, $instance ) { $flat_ordered_terms[] = $term; if ( ! empty( $term->children ) ) { - $to_process = array_merge( $this->order_by_selected( $term->children, $selected_filters['taxonomies'][ $taxonomy ]['terms'] ), $to_process, $order, $orderby ); + $to_process = array_merge( $this->order_by_selected( $term->children, $selected_filters['taxonomies'][ $taxonomy ]['terms'], $order, $orderby ), $to_process ); } }