所以我试图找出如何使用过滤器修改wp_get_attachment_link
函数。我希望能够将target='_blank'
属性添加到锚点。
这是我尝试过的,但它不起作用:
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 http://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' target='_blank'>$link_text</a>";
}
add_filter( 'wp_get_attachment_link', 'modify_attachment_link', 10, 6 );
也许这里发生的一些事情甚至没用,但我确实需要target
属性。
答案 0 :(得分:4)
假设链接中还没有“目标”属性,这样的事情应该有效。如果有,那么这将插入第二个。
<?php
function modify_attachment_link($markup) {
return preg_replace('/^<a([^>]+)>(.*)$/', '<a\\1 target="_blank">\\2', $markup);
}
add_filter( 'wp_get_attachment_link', 'modify_attachment_link', 10, 6 );
?>