Obtener ID de adjunto del Personalizador de WP

2

El WP_Customize_Image_Control del Personalizador de WP devuelve la URL del archivo adjunto, pero necesito la ID porque quiero mostrar la imagen de esta manera:

echo wp_get_attachment_image( $user_logo_id, 'riiskit-user-logo' );

El motivo de esto es porque quiero que el logotipo sea compatible con el complemento WP Retina 2x. Es por eso que estoy usando el tamaño de miniatura anterior. De esta manera, el usuario solo tiene que subir una imagen grande y el código se encargará de todo lo demás.

Ya probé todas las diferentes funciones attachment_src_to_id , pero ninguna de ellas funciona y solo devuelve null o false . Esto por ejemplo

Incluso cuando escribo la URL manualmente como un parámetro, todavía devuelve negativo.

Sin embargo, cuando escribo el ID manualmente dentro de wp_get_attachment_image , se muestra como se esperaba.

¿Se ha cambiado algo en WP v3.9 que hace que estas funciones devuelvan falso?

¿Quizás hay alguna forma de extender el control de imagen del Personalizador para recibir la ID del adjunto?

¿Alguna idea? :)

    
pregunta chrisriis 10.05.2014 - 19:21

2 respuestas

3

Sé que esto es antiguo, pero estaba buscando una respuesta a este problema para poder guardar una miniatura en lugar de usar la imagen de tamaño completo para un registro y no pude. Lo he resuelto para mis necesidades haciendo lo siguiente:

Al elegir una imagen, la encojo en el personaliza_sanitize _ {$ this- > id} filter . Esto me da la url de la imagen en un filtro para hacer lo que quiero con.

Inicialmente usé attachment_url_to_postid para cambiar el valor en la devolución de llamada del filtro y luego devolver la nueva imagen URL de la función, que luego se almacenaría en lugar de la URL estándar. Sin embargo, resulta que la función que llena el cargador con cualquier selección previa (que se encuentra en la clase WP_Customize_Upload_Control que el WP_Customize_Image_Control hereda de) utiliza esta misma función para obtener el ID de adjunto y, en última instancia, representar la selección actual. Esto se rompe cuando la URL que se le pasa es una miniatura, que es a lo que le cambié el valor de la base de datos.

Lo que hice en realidad fue guardar el valor como wp_option en la devolución de llamada del filtro y simplemente enviar el valor estándar a través de la función para no romperlo como sucedía:

functions.php

function site_logo_save( $value ) {
    $id = attachment_url_to_postid($value);
    $thumb = wp_get_attachment_image_src( $id );
    $url = $thumb[0];
    update_option('site_logo', $url);
    return $value;
}
add_action('customize_sanitize_site_logo', 'site_logo_save');

Luego, en mi archivo de tema, en lugar de usar get_theme_mod , simplemente usé get_option para recuperar la url:

header.php

<div class="site-branding">
    <?php if($site_logo = get_option('site_logo')): ?>
        <img src="<?php echo get_option('site_logo'); ?>" class="site-logo" alt="<?php bloginfo( 'name' ); ?>">
    <?php else: ?>
        <h1 class="site-title"><a href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></h1>
        <h2 class="site-description"><?php bloginfo( 'description' ); ?></h2>
    <?php endif; ?>
</div><!-- .site-branding -->

<?php 
// Add this if we are in the customizer for reseting when no image selected
global $wp_customize;
if ( isset( $wp_customize ) ) : ?>
<div style="display: none;">
    <div class="site-branding-no-logo">
        <h1 class="site-title"><a href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></h1>
        <h2 class="site-description"><?php bloginfo( 'description' ); ?></h2>
    </div>
</div>
<?php endif; ?>

Además, como quería usar 'transport' => 'postMessage' para mi configuración, necesitaba hacer una llamada admin-ajax para obtener la imagen en miniatura que iba a usar cada vez que se cambiaban las opciones del personalizador para reflejar esto en vivo:

customizer.js

wp.customize( 'site_logo', function( value ) {
    value.bind( function( to ) {
        if (to == false) {
            var orig = $( '.site-branding-no-logo' ).html();
            $( '.site-branding' ).html( orig );
        } else {
            var data = {
                action: 'get_actual_site_logo_url'
            };
            $.post(ajaxurl, data, function(response) {
                var $img = $('<img>').attr('src', response);
                $( '.site-branding' ).html( $img );
            });
        }
    } );
} );

functions.php

function get_actual_site_logo_url_callback() {
    echo get_option('site_logo');

    wp_die();
}
add_action( 'wp_ajax_get_actual_site_logo_url', 'get_actual_site_logo_url_callback' );

Es justo decir que tuve que hacer todo lo posible para obtener la funcionalidad que quería pero ¡parece que funciona bien!

    
respondido por el RichieAHB 09.01.2015 - 13:58
3

Esto es muy antiguo, pero para alguien que viene aquí a través de búsqueda

WP_Customize_Media_Control control en WP desde 4.2 le da el ID de adjunto.

Ref: enlace

    
respondido por el Satish Gandham 13.03.2017 - 07:45

Lea otras preguntas en las etiquetas