Merge pull request #272 from kadimi/patch-8

Sort leagues, positions and season by sp_order
This commit is contained in:
Brian Miyaji
2018-07-09 16:00:12 +10:00
committed by GitHub
4 changed files with 47 additions and 37 deletions

View File

@@ -5,7 +5,7 @@
* The SportsPress custom post class handles individual post data.
*
* @class SP_Custom_Post
* @version 0.8
* @version 2.6.5
* @package SportsPress/Abstracts
* @category Abstract Class
* @author ThemeBoy
@@ -71,4 +71,19 @@ abstract class SP_Custom_Post {
public function get_post_data() {
return $this->post;
}
/**
* Get terms sorted by order.
*
* @access public
* @param string $taxonomy The taxonomy.
* @return array|false|WP_Error See `get_the_terms()`
*/
public function get_terms_sorted_by_sp_order( $taxonomy ) {
$terms = get_the_terms( $this->ID, $taxonomy );
if ( $terms ) {
usort( $terms, 'sp_sort_terms' );
}
return $terms;
}
}

View File

@@ -5,7 +5,7 @@
* @author ThemeBoy
* @category Admin
* @package SportsPress/Admin/Meta_Boxes
* @version 2.6
* @version 2.6.5
*/
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
@@ -20,20 +20,7 @@ class SP_Meta_Box_Player_Statistics {
*/
public static function output( $post ) {
$player = new SP_Player( $post );
$args = array(
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'sp_order',
'compare' => 'NOT EXISTS',
),
array(
'key' => 'sp_order',
'compare' => 'EXISTS',
),
),
);
$leagues = get_the_terms( $post->ID, 'sp_league', $args );
$leagues = $player->get_terms_sorted_by_sp_order( 'sp_league' );
$league_num = sizeof( $leagues );
$sections = get_option( 'sportspress_player_performance_sections', -1 );
$show_career_totals = 'yes' === get_option( 'sportspress_player_show_career_total', 'no' ) ? true : false;

View File

@@ -13,33 +13,33 @@
class SP_Player extends SP_Custom_Post {
/**
* Returns positions
* Returns positions sorted by `sp_order`.
*
* @access public
* @return array
*/
public function positions() {
return get_the_terms( $this->ID, 'sp_position' );
return $this->get_terms_sorted_by_sp_order( 'sp_position' );
}
/**
* Returns leagues
* Returns leagues sorted by `sp_order`.
*
* @access public
* @return array
*/
public function leagues() {
return get_the_terms( $this->ID, 'sp_league' );
return $this->get_terms_sorted_by_sp_order( 'sp_league' );
}
/**
* Returns seasons
* Returns seasons sorted by `sp_order`.
*
* @access public
* @return array
*/
public function seasons() {
return get_the_terms( $this->ID, 'sp_season' );
return $this->get_terms_sorted_by_sp_order( 'sp_season' );
}
/**
@@ -110,23 +110,11 @@ class SP_Player extends SP_Custom_Post {
* @return array
*/
public function data( $league_id, $admin = false, $section = -1 ) {
$args = array(
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'sp_order',
'compare' => 'NOT EXISTS',
),
array(
'key' => 'sp_order',
'compare' => 'EXISTS',
),
),
);
$seasons = (array)get_the_terms( $this->ID, 'sp_season', $args );
$seasons = (array) $this->get_terms_sorted_by_sp_order( 'sp_season' );
$metrics = (array)get_post_meta( $this->ID, 'sp_metrics', true );
$stats = (array)get_post_meta( $this->ID, 'sp_statistics', true );
$leagues = (array) sp_array_value( (array)get_post_meta( $this->ID, 'sp_leagues', true ), $league_id );
uksort( $leagues, 'sp_sort_terms' );
$manual_columns = 'manual' == get_option( 'sportspress_player_columns', 'auto' ) ? true : false;
$season_ids = array_filter(wp_list_pluck( $seasons, 'term_id' ));
@@ -136,7 +124,7 @@ class SP_Player extends SP_Custom_Post {
}
$leagues = array_replace( $season_order, $leagues );
// Get performance labels
$args = array(
'post_type' => array( 'sp_performance' ),

View File

@@ -1463,6 +1463,26 @@ if ( !function_exists( 'sp_sort_table_teams' ) ) {
}
}
if ( ! function_exists( 'sp_sort_terms' ) ) {
/**
* Sorts terms by `sp_order`.
*
* @param int|object $a Term ID or term.
* @param int|object $b Term ID or term.
* @return int Sorting order.
*/
function sp_sort_terms( $a, $b ) {
if ( is_int( $a ) ) {
$a = get_term( $a );
}
if ( is_int( $b ) ) {
$b = get_term( $b );
}
return get_term_meta( $a->term_id, 'sp_order', true ) > get_term_meta( $b->term_id, 'sp_order', true );
}
}
if ( !function_exists( 'sp_get_next_event' ) ) {
function sp_get_next_event( $args = array() ) {
$options = array(