+/**
+ * Returns the Site Icon URL.
+ *
+ * @param int $size Size of the site icon.
+ * @param string $url Fallback url if no site icon is found.
+ * @param int $blog_id Id of the blog to get the site icon for.
+ * @return string Site Icon URL.
+ */
+function get_site_icon_url( $size = 512, $url = '', $blog_id = 0 ) {
+ if ( $blog_id && is_multisite() ) {
+ $site_icon_id = get_blog_option( $blog_id, 'site_icon' );
+ } else {
+ $site_icon_id = get_option( 'site_icon' );
+ }
+
+ if ( $site_icon_id ) {
+ if ( $size >= 512 ) {
+ $size_data = 'full';
+ } else {
+ $size_data = array( $size, $size );
+ }
+ $url_data = wp_get_attachment_image_src( $site_icon_id, $size_data );
+ if ( $url_data ) {
+ $url = $url_data[0];
+ }
+ }
+
+ return $url;
+}
+
+/**
+ * Displays the Site Icon URL.
+ *
+ * @param int $size Size of the site icon.
+ * @param string $url Fallback url if no site icon is found.
+ * @param int $blog_id Id of the blog to get the site icon for.
+ */
+function site_icon_url( $size = 512, $url = '', $blog_id = 0 ) {
+ echo esc_url( get_site_icon_url( $size, $url, $blog_id ) );
+}
+
+/**
+ * Whether the site has a Site Icon.
+ *
+ * @param int $blog_id Optional. Blog ID. Default: Current blog.
+ * @return bool
+ */
+function has_site_icon( $blog_id = 0 ) {
+ return (bool) get_site_icon_url( 512, '', $blog_id );
+}
+