Make WordPress Core


Ignore:
Timestamp:
09/22/2023 12:02:28 AM (13 months ago)
Author:
SergeyBiryukov
Message:

Media: Disable attachment pages for new installations.

WordPress creates attachment pages by default for every attachment uploaded. On the vast majority of sites, these attachment pages don't contain any meaningful information. They do however exist, get indexed by search engines, and sometimes even rank in search results, leading to bad results for users and site owners.

This commit introduces a wp_attachment_pages_enabled database option to control the attachment pages behavior:

  • On existing sites, the option is set to 1 on upgrade, so that attachment pages continue to work as is.
  • For new sites, the option is set to to 0 by default, which means attachment pages are redirected to the attachment URL.
  • Sites that want to enable or disable the attachment pages can set the option to 1 or 0, respectively.

Follow-up to [2958], [3303], [7149], [34690].

Props aristath, poena, afercia, joostdevalk, jonoaldersonwp, azaozz, johnbillion, joedolson, basiliskan, audrasjb, davelo, rilwis, manfcarlo, tyxla, garrett-eclipse, seedsca, eatingrules, matveb, antpb, zodiac1978, oglekler, zunaid321, costdev, SergeyBiryukov.
Fixes #57913.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/canonical.php

    r56245 r56657  
    543543            wp_redirect( $redirect_url, 301 );
    544544            die();
     545        }
     546    }
     547
     548    $is_attachment_redirect = false;
     549
     550    if ( is_attachment() && ! get_option( 'wp_attachment_pages_enabled' ) ) {
     551        $attachment_id = get_query_var( 'attachment_id' );
     552
     553        if ( current_user_can( 'read_post', $attachment_id ) ) {
     554            $redirect_url = wp_get_attachment_url( $attachment_id );
     555
     556            $is_attachment_redirect = true;
    545557        }
    546558    }
     
    651663    // Trailing slashes.
    652664    if ( is_object( $wp_rewrite ) && $wp_rewrite->using_permalinks()
     665        && ! $is_attachment_redirect
    653666        && ! is_404() && ( ! is_front_page() || is_front_page() && get_query_var( 'paged' ) > 1 )
    654667    ) {
Note: See TracChangeset for help on using the changeset viewer.