Ejemplo de Add_Filter para wp_get_attachment_link

2

Permítanme comenzar diciendo que realmente no entiendo Add_Filter, pero creo que quiero usarlo aquí. Si no es así, por favor hágamelo saber.

Quiero modificar wp_get_attachment_link para que cambie la url del enlace. Por ejemplo, si hago clic en una miniatura en una galería en lugar de ir directamente al archivo, quiero que vaya a www.foo.com.

Entonces, lo que me gustaría hacer es reemplazar lo que hace wp_get_attachment_link a través de add_filter. Pero no puedo entender cómo funciona add_filter. ¿Cómo obtengo los parámetros de la función original?

Llamada de función original

wp_get_attachment_link($id, $size, $permalink, $icon, $text);

Filtro

add_filter( 'wp_get_attachment_link', 'modify_attachment_link');

function modify_attachment_link() {
    //how do i access $id, $size, $permalink, $icon and $text???
    $foo = $id.$permalink;
    return $foo;
}
    
pregunta mrtsherman 10.05.2011 - 05:44

2 respuestas

6

Mira la función en wp-includes/post-template.php . Allí puedes ver qué información puedes obtener:

apply_filters(
    'wp_get_attachment_link'
,   "<a href='$url' title='$post_title'>$link_text</a>"
,   $id
,   $size
,   $permalink
,   $icon
,   $text 
);

Tenga en cuenta que no puede acceder al objeto $link_text y $_post como variables independientes. ¿Insecto? ¡Error!

En tu filtro no puedes cambiar el orden de los argumentos, solo el número.

Por lo tanto, add_filter( 'wp_get_attachment_link', 'modify_attachment_link', 10, 2 ); te dará el marcado de enlace y $id . El mayor número de argumentos disponibles es 6 .

El valor de retorno de su función reemplazará el primer argumento.

Un ejemplo (no probado) para cambiar la URL del enlace:

/**
 * Replaces the URL for an attachment link.
 *
 * @param  string $markup     Original link markup
 * @param  int    $id         Post id
 * @param  mixed  $size       Image size, array or string
 * @param  string $permalink  URL
 * @param  bool   $icon       Use an icon?
 * @param  bool   $text       Use text?
 * @return string             New markup
 */
function modify_attachment_link( $markup, $id, $size, $permalink, $icon, $text )
{
    // We need just thumbnails.
    if ( 'thumbnail' !== $size )
    {   // Return the original string untouched.
        return $markup;
    }

    // We have stored the new URL in a post meta field.
    // See https://wordpress.stackexchange.com/q/3097 for an example.
    $new_url = get_post_meta( $id, 'extra_url', TRUE );

    if ( empty ( $new_url ) )
    {   // There is no URL.
        return $markup;
    }

    // Recreate the missing information.
    $_post      = & get_post( $id );
    $post_title = esc_attr( $_post->post_title );

    if ( $text ) 
    {
        $link_text = esc_attr( $text );
    } 
    elseif ( 
           ( is_int( $size )    && $size != 0 ) 
        or ( is_string( $size ) && $size != 'none' ) 
        or $size != FALSE 
    ) 
    {
        $link_text = wp_get_attachment_image( $id, $size, $icon );
    } 
    else 
    {
        $link_text = '';
    }

    if ( trim( $link_text ) == '' )
    {
        $link_text = $_post->post_title;
    }

    return "<a href='$new_url' title='$post_title'>$link_text</a>";
}

add_filter( 'wp_get_attachment_link', 'modify_attachment_link', 10, 6 );

Lectura adicional:

respondido por el fuxia 10.05.2011 - 09:22
1
add_filter( 'wp_get_attachment_link', 'modify_attachment_link', 10, 5 );

function modify_attachment_link($id, $size, $permalink, $icon, $text) {
    $foo = $id.$permalink;
    return $foo;
}

Consulte la source .

Los dos últimos argumentos son prioridad y número de argumentos. Si no especifica el número de argumentos de nada por encima de uno (IIRC), se generará un error.

    
respondido por el dpgtfc 10.05.2011 - 06:16

Lea otras preguntas en las etiquetas