it-swarm.com.de

Add_Filter-Beispiel für wp_get_attachment_link

Lassen Sie mich vorab sagen, dass ich Add_Filter nicht wirklich verstehe, aber ich denke, dass ich es hier verwenden möchte. Wenn nicht, lassen Sie es mich bitte wissen.

Ich möchte wp_get_attachment_link so ändern, dass sich die Link-URL ändert. Wenn ich zum Beispiel in einer Galerie auf ein Vorschaubild klicke, anstatt direkt zu der Datei zu wechseln, möchte ich, dass sie zu www.foo.com wechselt.

Ich möchte also ersetzen, was wp_get_attachment_link über add_filter macht. Aber ich kann nicht herausfinden, wie add_filter funktioniert. Wie bekomme ich die Parameter aus der ursprünglichen Funktion?

Ursprünglicher Funktionsaufruf

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

Filter

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;
}
2
mrtsherman

Schauen Sie sich die Funktion in wp-includes/post-template.php an. Dort sehen Sie, welche Informationen Sie erhalten können:

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

Beachten Sie, dass Sie nicht als eigenständige Variablen auf den $link_text und den $_post zugreifen können. Fehler? Fehler!

In Ihrem Filter können Sie nicht die Reihenfolge der Argumente ändern, sondern nur die Anzahl.

Mit add_filter( 'wp_get_attachment_link', 'modify_attachment_link', 10, 2 ); erhalten Sie das Link-Markup und den $id. Die höchste Anzahl verfügbarer Argumente ist 6 .

Der Rückgabewert Ihrer Funktion ersetzt das erste Argument.

Ein (ungetestetes) Beispiel zum Ändern der Link-URL:

/**
 * 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 );

Weitere Lektüre:

6
fuxia
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;
}

Siehe die Quelle .

Die letzten beiden Argumente sind Priorität und Anzahl der Argumente. Wenn Sie die Anzahl der Argumente über eins (IIRC) nicht angeben, wird ein Fehler ausgegeben.

1
dpgtfc