問題描述

如何將附件頁面的格式從/[post-url]/[attachment-name]/更改為/media/[attachment-name]/?我明白我可以通過 attachment_link 過濾器覆蓋 get_attachment_link 的輸出,但我想我需要改變重定向結構,所以 WordPress 知道如何處理這些 URL?

最佳解決方案

您可以執行以下操作:

/* add new rewrite rule */
function attachment_rewrite( $wp_rewrite ) {
    $rule = array(
        'media/(.+)' => 'index.php?attachment=' . $wp_rewrite->preg_index(1)
    );

    $wp_rewrite->rules = $rule + $wp_rewrite->rules;
}
add_filter( 'generate_rewrite_rules', 'attachment_rewrite' );

/* redirect standard wordpress attachments urls to new format */
function redirect_old_attachment() {
    global $wp;

    if( !preg_match( '/^media/(.*)/', $wp->request ) && isset( $wp->query_vars['attachment'] ) ) {
        wp_redirect( site_url( '/media/' . $wp->query_vars['attachment'] ) , 301 );
    }
}
add_filter( 'template_redirect', 'redirect_old_attachment' );

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。