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 );
}