関数the_permalink
の出力をフィルタリングする方法を私は知っています - それはこのようなものです:
add_filter('the_permalink', 'my_the_permalink');
function my_the_permalink($url) {
return 'http://mysite/my-link/';
}
そして<?PHP the_permalink($id); ?>
のように使うとうまくいきますが、get_permalink($id)
関数によって返されるリンクを変更したいと思いました。この場合、このフィルタは返されるパーマリンクには影響しません。
私はそれをキャッチしようとしていました:
add_filter('post_link', 'my_get_permalink', 10, 3);
function my_get_permalink($url, $post, $leavename=false) {
return 'http://mysite/my-link/';
}
しかし、このフィルタはget_permalink()
に対しては起動されません。それでは、どのように私はget_permalink()
によって返されたリンクを変更することができますか?
post_link
フィルタはpost
投稿タイプ専用です。
他の投稿タイプではこれらのフィルタが利用可能です:
post_type_link
カスタム投稿タイプpage_link
ページattachment_link
添付ファイルget_permalink()
functionは、実際には以下のラッパーです。
get_post_permalink()
get_attachement_link()
get_page_link()
そのような場合には。
上記のget_permalink()
のすべてのケースに対してカスタムのwpse_link
フィルタを作成する方法(未テスト)は次のとおりです。
foreach( [ 'post', 'page', 'attachment', 'post_type' ] as $type )
{
add_filter( $type . '_link', function ( $url, $post_id, $sample ) use ( $type )
{
return apply_filters( 'wpse_link', $url, $post_id, $sample, $type );
}, 9999, 3 );
}
ここで、すべてのケースを次のようにフィルタリングできます。
add_filter( 'wpse_link', function( $url, $post_id, $sample, $type )
{
return $url;
}, 10, 4 );