web-dev-qa-db-ja.com

エディタで他の投稿へのリンクをショートリンクに変更

リンクの挿入ダイアログを使用して別の投稿へのリンクを挿入する場合、WordPressは常にその投稿のパーマリンクを使用します。問題は、パーマリンク構造を変更すると、そのリンクが壊れることです。

どのような状況でも機能するように、リンクをパーマリンクから?p=123のようなショートリンクに変更する方法があるかどうか質問したいのですが。

ありがとう。

2
Anh Tran

このダイアログ内のリンクはwp_ajax_wp_link_ajax()によって作成されています(wp-admin/includes/ajax-actions.phpを参照してください。Codexまたはqueryposts.comにその機能に関するページはありません)。

リンクフィルタを変更するには、アクション'page_link'に対して、'post_type_link''post_link''attachment_link'、そしておそらく'internal-linking'check_ajax_referer() を呼び出しました。

さて、少し複雑に聞こえますが、それは本当に簡単です。 :)
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" );
}

しかし…パーマリンクを変更した場合は、とにかく既存のURLをリダイレクトするためにサーバー設定ファイルにリダイレクトを作成しなければなりません。ですから、このプラグインが本当に必要かどうかはわかりません。

3
fuxia