t[ $key ] = $value->$field; } else { $newlist[ $key ] = $value[ $field ]; } } $this->output = $newlist; return $this->output; } /* * When index_key is not set for a particular item, push the value * to the end of the stack. This is how array_column() behaves. */ foreach ( $this->output as $value ) { if ( is_object( $value ) ) { if ( isset( $value->$index_key ) ) { $newlist[ $value->$index_key ] = $value->$field; } else { $newlist[] = $value->$field; } } else { if ( isset( $value[ $index_key ] ) ) { $newlist[ $value[ $index_key ] ] = $value[ $field ]; } else { $newlist[] = $value[ $field ]; } } } $this->output = $newlist; return $this->output; } /** * Sorts the input array based on one or more orderby arguments. * * @since 4.7.0 * * @param string|array $orderby Optional. Either the field name to order by or an array * of multiple orderby fields as $orderby => $order. * @param string $order Optional. Either 'ASC' or 'DESC'. Only used if $orderby * is a string. * @param bool $preserve_keys Optional. Whether to preserve keys. Default false. * @return array The sorted array. */ public function sort( $orderby = array(), $order = 'ASC', $preserve_keys = false ) { if ( empty( $orderby ) ) { return $this->output; } if ( is_string( $orderby ) ) { $orderby = array( $orderby => $order ); } foreach ( $orderby as $field => $direction ) { $orderby[ $field ] = 'DESC' === strtoupper( $direction ) ? 'DESC' : 'ASC'; } $this->orderby = $orderby; if ( $preserve_keys ) { uasort( $this->output, array( $this, 'sort_callback' ) ); } else { usort( $this->output, array( $this, 'sort_callback' ) ); } $this->orderby = array(); return $this->output; } /** * Callback to sort an array by specific fields. * * @since 4.7.0 * * @see WP_List_Util::sort() * * @param object|array $a One object to compare. * @param object|array $b The other object to compare. * @return int 0 if both objects equal. -1 if second object should come first, 1 otherwise. */ private function sort_callback( $a, $b ) { if ( empty( $this->orderby ) ) { return 0; } $a = (array) $a; $b = (array) $b; foreach ( $this->orderby as $field => $direction ) { if ( ! isset( $a[ $field ] ) || ! isset( $b[ $field ] ) ) { continue; } if ( $a[ $field ] == $b[ $field ] ) { continue; } $results = 'DESC' === $direction ? array( 1, -1 ) : array( -1, 1 ); if ( is_numeric( $a[ $field ] ) && is_numeric( $b[ $field ] ) ) { return ( $a[ $field ] < $b[ $field ] ) ? $results[0] : $results[1]; } return 0 > strcmp( $a[ $field ], $b[ $field ] ) ? $results[0] : $results[1]; } return 0; } } 'icon' => '', ), 'meetup' => array( 'name' => 'Meetup', 'icon' => '', ), 'medium' => array( 'name' => 'Medium', 'icon' => '', ), 'patreon' => array( 'name' => 'Patreon', 'icon' => '', ), 'pinterest' => array( 'name' => 'Pinterest', 'icon' => '', ), 'pocket' => array( 'name' => 'Pocket', 'icon' => '', ), 'reddit' => array( 'name' => 'Reddit', 'icon' => '', ), 'skype' => array( 'name' => 'Skype', 'icon' => '', ), 'snapchat' => array( 'name' => 'Snapchat', 'icon' => '', ), 'soundcloud' => array( 'name' => 'Soundcloud', 'icon' => '', ), 'spotify' => array( 'name' => 'Spotify', 'icon' => '', ), 'telegram' => array( 'name' => 'Telegram', 'icon' => '', ), 'tiktok' => array( 'name' => 'TikTok', 'icon' => '', ), 'tumblr' => array( 'name' => 'Tumblr', 'icon' => '', ), 'twitch' => array( 'name' => 'Twitch', 'icon' => '', ), 'twitter' => array( 'name' => 'Twitter', 'icon' => '', ), 'vimeo' => array( 'name' => 'Vimeo', 'icon' => '', ), 'vk' => array( 'name' => 'VK', 'icon' => '', ), 'wordpress' => array( 'name' => 'WordPress', 'icon' => '', ), 'yelp' => array( 'name' => 'Yelp', 'icon' => '', ), 'youtube' => array( 'name' => 'YouTube', 'icon' => '', ), 'share' => array( 'name' => 'Share Icon', 'icon' => '', ), ); if ( ! empty( $service ) && ! empty( $field ) && isset( $services_data[ $service ] ) && ( 'icon' === $field || 'name' === $field ) ) { return $services_data[ $service ][ $field ]; } elseif ( ! empty( $service ) && isset( $services_data[ $service ] ) ) { return $services_data[ $service ]; } return $services_data; } /** * Returns CSS styles for icon and icon background colors. * * @param array $context Block context passed to Social Link. * * @return string Inline CSS styles for link's icon and background colors. */ function block_core_social_link_get_color_styles( $context ) { $styles = array(); if ( array_key_exists( 'iconColorValue', $context ) ) { $styles[] = 'color: ' . $context['iconColorValue'] . '; '; } if ( array_key_exists( 'iconBackgroundColorValue', $context ) ) { $styles[] = 'background-color: ' . $context['iconBackgroundColorValue'] . '; '; } return implode( '', $styles ); }