Je sais comment filtrer la sortie de la fonction the_permalink
- c'est comme ça:
add_filter('the_permalink', 'my_the_permalink');
function my_the_permalink($url) {
return 'http://mysite/my-link/';
}
Et ça marche quand je l’utilise comme: <?PHP the_permalink($id); ?>
, mais je voulais changer le lien retourné par la fonction get_permalink($id)
. Et ce filtre n'affecte pas le permalien retourné dans ce cas.
J'essayais de l'attraper avec:
add_filter('post_link', 'my_get_permalink', 10, 3);
function my_get_permalink($url, $post, $leavename=false) {
return 'http://mysite/my-link/';
}
Mais ce filtre n'est pas déclenché pour la get_permalink()
. Alors, comment puis-je modifier les liens renvoyés par la get_permalink()
?
Notez que le filtre post_link
ne concerne que le type d'article post
.
Pour les autres types post ces filtres sont disponibles:
post_type_link
for types de publication personnalisés page_link
pour page attachment_link
for attachment La fonction get_permalink()
est en réalité un wrapper pour:
get_post_permalink()
get_attachement_link()
get_page_link()
dans ces cas.
Voici un moyen (non testé) de créer un filtre wpse_link
personnalisé pour tous les cas susmentionnés de get_permalink()
:
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 );
}
où nous pouvons maintenant filtrer tous les cas avec:
add_filter( 'wpse_link', function( $url, $post_id, $sample, $type )
{
return $url;
}, 10, 4 );