添付ファイル(attachment.php)のURLをリライトする

構築・開発WordPress

カスタム投稿タイプの記事入力画面から画像をアップすると、添付ファイルのリンクが404となり繋がらなくなる現象がありました。

確認バージョンは、WordPress 4.7.5 です。

すべての環境で同じになるかまでは検証できていませんが、以前にも「Custom Upload Dir」プラグインと併用するとNot Foundになる現象がありました。
Custom Upload Dirとカスタム投稿タイプ指定でNot Foundになる

 

管理画面のメディアから「表示」リンクのURLを確認すると

http://example.com/投稿タイプ名/ポスト名/画像のポスト名

のようになり、リンクがつながらない状態でした。

 

リンクの間にattachmentと入れれば、表示することは可能でした。

http://example.com/投稿タイプ名/ポスト名/attachment/画像のポスト名

 

解決するためにリライト周りを色々といじってみたのですが、なかなか解決することができませんでした。

が、添付ファイルのページリンクを書き換えるという方法で解決することができました。

add_filter('attachment_link', 'pal_change_link', 10, 2 );
function pal_change_link( $link, $id ) {
    return home_url("/file/$id/");
}
add_filter('rewrite_rules_array', 'pal_insert_rewrite_rules');
function pal_insert_rewrite_rules( $rules ) {
    $newrules = array();
    $newrules['file/(\d*)$'] = 'index.php?attachment_id=$matches[1]';
    return $newrules + $rules;
}
add_action('wp_loaded', 'pal_flush_rules');
function pal_flush_rules() {
    $rules = get_option( 'rewrite_rules' );
    if ( ! isset( $rules['file/(\d*)$'] ) ) {
        global $wp_rewrite;
        $wp_rewrite->flush_rules();
    }
}

この処理を入れることにより、カスタム投稿タイプ関係なく下記のようなURLとなります。

http://example.com/file/ポストID/

3行目、8行目、14行目にある「file」という文言を変更することでattachmentのディレクトリ名を変更することができます。

 

参考サイト

Pretty Attachment Links

コメント

スポンサーリンク
タイトルとURLをコピーしました