Disabilitare Completamente le Pagine degli Allegati
Vorrei disabilitare completamente tutte le pagine degli allegati. Ho cercato su Google, ma ho trovato solo informazioni su come reindirizzare al post genitore o alla homepage. Non la definirei una soluzione elegante. Perché introdurre permalink non necessari che reindirizzano alla homepage? Non si potrebbe disabilitare completamente?
Puoi filtrare le regole di riscrittura predefinite e rimuovere quelle per gli allegati:
function cleanup_default_rewrite_rules( $rules ) {
foreach ( $rules as $regex => $query ) {
if ( strpos( $regex, 'attachment' ) || strpos( $query, 'attachment' ) ) {
unset( $rules[ $regex ] );
}
}
return $rules;
}
add_filter( 'rewrite_rules_array', 'cleanup_default_rewrite_rules' );
Non dimenticare di salvare nuovamente i tuoi permalink una volta. WordPress genererà nuove regole senza alcun riferimento agli allegati.
Ora, l'URL della pagina degli allegati restituirà un errore 404. Puoi anche aggiungere un reindirizzamento per prevenire la pagina 404, che in questo caso è inutile. Ma non sono sicuro come catturare il reindirizzamento - is_attachment() non funzionerà se le regole di riscrittura sono state rimosse.
Aggiornamento:
WordPress continuerà a offrire gli URL "pretty" delle pagine degli allegati nella libreria media e nella finestra di inserimento media. Puoi filtrare anche questo:
function cleanup_attachment_link( $link ) {
return;
}
add_filter( 'attachment_link', 'cleanup_attachment_link' );
In questo caso, anche quando inserisci un allegato in un articolo e selezioni "Collega alla pagina dell'allegato", l'immagine verrà inserita senza il link.

Sarebbe possibile impostare il rewrite in modo che sia l'URL del file multimediale (collegato a wp-content/uploads
) invece di una pagina generata automaticamente?

Sì, mi piacerebbe avere la possibilità di reindirizzare tutte le pagine degli allegati all'URL del file :)

A proposito, questo codice non funziona completamente. Se l'allegato viene caricato per un articolo o una pagina, allora tutto funziona bene. Se invece carichi semplicemente un allegato nella libreria multimediale, la sua pagina si apre comunque.

@Mario62RUS 1. Non tutti utilizzano Yoast SEO. Alcune persone odiano il carico eccessivo che porta. È come un cancro per la tua interfaccia di amministrazione. 2. Sì, le cose sono cambiate dalla versione 5.0 e con Gutenberg. Questo codice dovrebbe essere rivisto.

nota che in WP 6.4 c'è un interruttore per disattivare gli allegati, questa risposta non impedisce che appaiano nella mappa del sito di WP core, non disabilita gli endpoint REST API degli allegati che contengono l'URL, non disattiva i permalink brutti delle pagine degli allegati, o nasconde l'opzione nelle UI della galleria/immagini/libreria multimediale, ecc.

Se vuoi disabilitare completamente le pagine dei media, dovresti utilizzare un codice di risposta 404 invece di un reindirizzamento. Questo può essere fatto con il seguente codice:
function wpse237762_set_404() {
if (is_attachment()) {
global $wp_query;
$wp_query->set_404();
status_header(404);
}
}
// Questo mostrerà 404 sulla pagina dell'allegato
add_filter('template_redirect', 'wpse237762_set_404');
// Questo mostrerà 404 invece di reindirizzare alla pagina dell'allegato quando si tratta di uno slash finale
add_filter('redirect_canonical', 'wpse237762_set_404', 0);
Per mantenere funzionanti i collegamenti alle pagine degli allegati e reindirizzarli direttamente al file, puoi utilizzare il seguente codice:
function wpse237762_change_attachment_link($url, $id) {
$attachment_url = wp_get_attachment_url($id);
if ($attachment_url) {
return $attachment_url;
}
return $url;
}
add_filter('attachment_link', 'wpse237762_change_attachment_link', 10, 2);
Per evitare che le pagine degli allegati riservino slug dalle pagine normali, puoi usare questo codice per impostare tutti i nuovi slug degli allegati come casuali (in questo caso UUIDv4)
function wpse237762_unique_slug($slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug) {
if ($post_type === 'attachment') {
return str_replace('-', '', wp_generate_uuid4());
}
return $slug;
}
add_filter('wp_unique_post_slug', 'wpse237762_unique_slug', 10, 6);
Questo impedirà che un'immagine chiamata products.jpeg
riservi l'URL https://example.com/products
. Ciò comporterebbe che una pagina chiamata Prodotti riceva l'URL https://example.com/products-2
, cosa che ovviamente non sarebbe l'ideale.
Ho raggruppato questo codice nel plugin Disable Attachment Pages, che include anche uno strumento per modificare gli slug degli allegati esistenti in modo che non causino problemi in futuro.

Attenzione. Questa linea add_filter('redirect_canonical', 'wpse237762_set_404', 0); disabilita anche i reindirizzamenti dei collegamenti brevi di WordPress come tudominio.com/?p=2570

Per coloro che potrebbero non voler utilizzare plugin o preferiscono un metodo leggero, questa soluzione potrebbe essere utile.
Questo metodo reindirizza gli allegati direttamente al file invece che alla pagina dell'allegato, ed è lo stesso approccio utilizzato da alcuni plugin.
Per testare, inserisci il seguente codice nel file functions.php
del tema.
add_action( 'template_redirect', 'test_attachment_redirect', 10 );
function test_attachment_redirect() {
if( is_attachment() ) {
$url = wp_get_attachment_url( get_queried_object_id() );
wp_redirect( $url, 301 );
}
return;
}
Riferimenti: is_attachment wp_redirect

Questa è ora l'impostazione predefinita in WP 6.4 e può essere configurata utilizzando l'opzione wp_attachment_pages_enabled
. Le modifiche sono possibili:
- tramite CLI:
wp option set wp_attachment_pages_enabled 0|1
- visitando
/wp-admin/options.php
- attraverso un piccolo plugin
Quando questa opzione è impostata su 0
:
- le pagine degli allegati non compaiono più nell'interfaccia grafica come opzione quando si utilizzano immagini/gallerie
- gli URL delle pagine degli allegati reindirizzano ai file originali per gli utenti connessi
- sitemap/endpoint REST API ecc. utilizzano l'URL originale dei caricamenti
Maggiori dettagli su https://make.wordpress.org/core/2023/10/16/changes-to-attachment-pages/
