web-dev-qa-db-fra.com

Changer le lien vers un autre poste en raccourci dans l'éditeur

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.

2
Anh Tran

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.

3
fuxia