私はAdd_Filterを本当に理解していないと言うことによって私に序文をさせてください、しかし私はそれをここで使いたいと思います。そうでなければ私に知らせてください。
リンクのURLが変わるように wp_get_attachment_link を変更します。たとえば、ファイルに直接移動するのではなくギャラリーのサムネイルをクリックした場合は、www.foo.comに移動します。
だから私がやりたいのは、wp_get_attachment_linkの動作をadd_filterで置き換えることです。しかし、add_filterがどのように機能するのか理解できません。元の関数からパラメータを取得する方法
オリジナル関数呼び出し
wp_get_attachment_link($id, $size, $permalink, $icon, $text);
フィルタ
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;
}
wp-includes/post-template.php
の関数を見てください。そこであなたはあなたが得ることができるどんな情報を見ます:
apply_filters(
'wp_get_attachment_link'
, "<a href='$url' title='$post_title'>$link_text</a>"
, $id
, $size
, $permalink
, $icon
, $text
);
$link_text
および$_post
オブジェクトにスタンドアロン変数としてアクセスすることはできません。バグ?バグ!
あなたのフィルタでは、引数の順番を変えることはできません。ただ番号を変えるだけです。
だからadd_filter( 'wp_get_attachment_link', 'modify_attachment_link', 10, 2 );
はあなたにリンクマークアップと$id
を与えるでしょう。利用可能な引数の最大数は6です。
関数の戻り値は最初の引数を置き換えます。
リンク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 );
参考文献:
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;
}
source を参照してください。
最後の2つの引数は優先順位と引数の数です。あなたが1以上の引数の数を指定しないと(IIRC)エラーになります。