Actuellement, si nous utilisons la boîte de dialogue Insérer un lien pour insérer un lien vers un autre message, WordPress utilise toujours le permalien de ce message. Le problème est que lorsque nous changeons la structure de lien permanent, ce lien sera brisé.
Je voudrais demander s'il y a un moyen de changer le lien de permalien en shortlink tel que ?p=123
pour le faire fonctionner en toute circonstance.
Merci.
Les liens dans cette boîte de dialogue sont créés par wp_ajax_wp_link_ajax()
(voir wp-admin/includes/ajax-actions.php
, il n'y a pas de page Codex ou queryposts.com pour cette fonction).
Pour changer les liens, filtrez 'page_link'
, 'post_type_link'
, 'post_link'
et peut-être 'attachment_link'
après check_ajax_referer()
a été appelé pour l'action 'internal-linking'
.
Ça a l'air un peu compliqué, mais c'est vraiment facile. :)
Plugin sur GitHub: https://Gist.github.com/3731739
add_action( 'check_ajax_referer', 't5_temporary_internal_links', 10, 1 );
/**
* Turn permalinks into dynamic links.
*
* @param string $action_or_link Action when called per 'check_ajax_referer',
* later the permalink.
* @param object|integer $post
* @wp-hook check_ajax_referer
* @wp-hook page_link
* @wp-hook attachment_link
* @wp-hook post_type_link
* @wp-hook post_link
* @since 2012.09.16
* @return string
*/
function t5_temporary_internal_links( $action_or_link, $post = 0 )
{
if ( 'check_ajax_referer' === current_filter()
and 'internal-linking' === $action_or_link
)
{
add_filter( 'page_link', __FUNCTION__, 10, 2 );
// You cannot search for attachments in this dialog,
// but a plugin might have changed that, so …
add_filter( 'attachment_link', __FUNCTION__, 10, 2 );
add_filter( 'post_type_link', __FUNCTION__, 10, 2 );
add_filter( 'post_link', __FUNCTION__, 10, 2 );
return;
}
$id = is_object( $post ) ? $post->ID : $post;
return home_url( "?p=$id" );
}
Mais… lorsque vous modifiez des liens permanents, vous devez quand même créer des redirections dans un fichier de configuration du serveur pour rediriger les URL existantes. Donc, je ne suis pas sûr si ce plugin est vraiment nécessaire.