リンクの挿入ダイアログを使用して別の投稿へのリンクを挿入する場合、WordPressは常にその投稿のパーマリンクを使用します。問題は、パーマリンク構造を変更すると、そのリンクが壊れることです。
どのような状況でも機能するように、リンクをパーマリンクから?p=123
のようなショートリンクに変更する方法があるかどうか質問したいのですが。
ありがとう。
このダイアログ内のリンクは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をリダイレクトするためにサーバー設定ファイルにリダイレクトを作成しなければなりません。ですから、このプラグインが本当に必要かどうかはわかりません。