Cómo mostrar archivos .ico en la biblioteca de medios

11

He agregado un tipo .ico mime en mi sitio de WordPress y puedo cargar archivos de favicon. Pero la biblioteca de medios solo muestra la imagen default.png para estas imágenes y también en el Personalizador. ¿Cómo puedo hacer que WordPress muestre estas imágenes de favicon, en la biblioteca de medios y en el personalizador?

    
pregunta AlanP 13.02.2015 - 01:06

1 respuesta

15

Actualización: Parece que esto será compatible con 5.0+. Consulte el boleto # 43458

El valor por defecto

Así es como se muestran los archivos favicon ( .ico ) en la vista Media Grid :

Estaeslapartecorrespondientedelamicroplantilla:

<#}elseif('image'===data.type&&data.sizes){#><divclass="centered">
        <img src="{{ data.size.url }}" draggable="false" alt="" />
    </div>
<# } else { #>
    <div class="centered"> 
        <# if ( data.image && data.image.src && data.image.src !== data.icon ) { #>
           <img src="{{ data.image.src }}" class="thumbnail" draggable="false" />
        <# } else { #>
            <img src="{{ data.icon }}" class="icon" draggable="false" />
        <# } #>
    </div>
    <div class="filename">
        <div>{{ data.filename }}</div>
    </div>
<# } #>

donde data.sizes está vacío para los favicons .

Método 1) Utilizando el filtro wp_mime_type_icon

El tipo mime para los favicons es image/x-icon .

Logré mostrar los archivos .ico en la vista Media Grid con:

add_filter( 'wp_mime_type_icon', function( $icon, $mime, $post_id )
{
    if( $src = false || 'image/x-icon' === $mime && $post_id > 0 )
        $src = wp_get_attachment_image_src( $post_id );

    return is_array( $src ) ? array_shift( $src ) : $icon;
}, 10, 3 ); 

donde es importante aquí mantener el tercer parámetro de wp_get_attachment_image_src como $icon = false (por defecto) para evitar un bucle infinito.

Los favicons se muestran así:

Método2)Utilizandoelfiltrowp_prepare_attachment_for_js

Cuandocargamoslavistadelacuadrículademedios,hacemosunallamadaalcontroladorwp_ajax_query_attachments.Realizalasiguienteconsultadeadjuntos:

$query=newWP_Query($query);$posts=array_map('wp_prepare_attachment_for_js',$query->posts);

Enestafunciónwp_prepare_attachment_for_js,seagregainformacióndiversaalaspublicacionesWP_Postysefiltrancon:

returnapply_filters('wp_prepare_attachment_for_js',$response,$attachment,$meta);

dondelasalidaeslamatriz$response.

Podemosusarestefiltroparaagregarlostamañosquefaltanparalosfavicons:

add_filter('wp_prepare_attachment_for_js',function($response,$attachment,$meta){if('image/x-icon'===$response['mime']&&isset($response['url'])&&!isset($response['sizes']['full'])){$response['sizes']=array('full'=>array('url'=>$response['url']));}return$response;},10,3);

yluegosemostraránasí:

Observe que solo establecemos la parte url y no las partes width , height y orientation . Podríamos ampliar aún más la solución para agregar estos datos, por ejemplo, con la ayuda de la función wp_get_attachment_image_src() . Pero te lo dejo a ti ;-)

Algunos ejemplos de $response :

Este es un ejemplo de la matriz $response para el archivo favicon.ico :

Array 
(
    [id] => 803
    [title] => favicon
    [filename] => favicon.ico
    [url] => http://example.tld/wp-content/uploads/2015/02/favicon.ico
    [link] => http://example.tld/?attachment_id=803
    [alt] => 
    [author] => 11
    [description] => 
    [caption] => 
    [name] => favicon
    [status] => inherit
    [uploadedTo] => 0
    [date] => 1423791136000
    [modified] => 1423791136000
    [menuOrder] => 0
    [mime] => image/x-icon
    [type] => image
    [subtype] => x-icon
    [icon] => http://example.tld/wp-includes/images/media/default.png
    [dateFormatted] => February 13, 2015
    [nonces] => Array
        (
            [update] => 4fac983f49
            [delete] => efd563466d
            [edit] => df266bf556
        )

    [editLink] => http://example.tld/wp-admin/post.php?post=803&action=edit
    [meta] => 
    [authorName] => someuser
    [filesizeInBytes] => 1406
    [filesizeHumanReadable] => 1 kB
    [compat] => Array
        (
            [item] => 
            [meta] => 
        )

)

Aquí hay un ejemplo para la imagen WordPress-Logo.jpg :

Array
(
    [id] => 733
    [title] => WordPress-Logo
    [filename] => WordPress-Logo.jpg
    [url] => http://example.tld/wp-content/uploads/2015/02/WordPress-Logo.jpg
    [link] => http://example.tld/2015/02/10/test/wordpress-logo/
    [alt] => 
    [author] => 1
    [description] =>
    [caption] =>
    [name] =>  wordpress-logo
    [status] => inherit
    [uploadedTo] => 784
    [date] => 1423314735000
    [modified] => 1423571320000
    [menuOrder] => 0
    [mime] => image/jpeg
    [type] => image
    [subtype] => jpeg
    [icon] => http://example.tld/wp-includes/images/media/default.png
    [dateFormatted] => February 7, 2015
    [nonces] => Array
        (
            [update] => cb6a4bca10
            [delete] => 068a4d3897
            [edit] => 14b7d201ff
        )

    [editLink] => http://example.tld/wp-admin/post.php?post=733&action=edit
    [meta] => 
    [authorName] => someuser
    [uploadedToLink] => http://example.tld/wp-admin/post.php?post=784&action=edit
    [uploadedToTitle] => 20150209021847
    [filesizeInBytes] => 127668
    [filesizeHumanReadable] => 125 kB
    [sizes] => Array
        (
            [thumbnail] => Array
                (
                    [height] => 150
                    [width] => 150
                    [url] => http://example.tld/wp-content/uploads/2015/02/WordPress-Logo-150x150.jpg
                    [orientation] => landscape
                )

            [medium] => Array
                (
                    [height] => 184
                    [width] => 300
                    [url] => http://example.tld/wp-content/uploads/2015/02/WordPress-Logo-300x184.jpg
                    [orientation] => landscape
                )

            [full] => Array
                (
                    [url] => http://example.tld/wp-content/uploads/2015/02/WordPress-Logo.jpg
                    [height] => 620
                    [width] => 1010
                    [orientation] => landscape
                )

        )

    [height] => 620
    [width] => 1010
    [orientation] => landscape
    [compat] => Array
        (
            [item] => 
            [meta] => 
        )

)

ps: Estamos específicamente interesados en la parte $response['size'] de estos ejemplos.

    
respondido por el birgire 13.02.2015 - 03:43

Lea otras preguntas en las etiquetas