Disabilitare Completamente le Pagine degli Allegati

31 ago 2016, 18:54:10
Visualizzazioni: 16.5K
Voti: 13

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?

3
Commenti

Cosa intendi con "disabilitare completamente"? Quando si aggiungono allegati multimediali, gli URL vengono creati automaticamente. Non so se sia possibile disabilitare questa azione senza danneggiare il core di WordPress.

Perché reindirizzare non è una soluzione elegante? Qual è il problema con gli URL degli allegati? Non sto giudicando, sto solo cercando di capire per poter offrire una soluzione.

Fencer04 Fencer04
31 ago 2016 20:35:08

Mi sembra semplicemente inutile che ogni file che carico abbia la sua pagina con un permalink. Non riesco a pensare a molti scenari d'uso per questi. La maggior parte delle persone vuole solo caricare file per collegarli, non creare una pagina separata per visualizzarli.

Maciej Kravchyk Maciej Kravchyk
1 set 2016 08:19:49

@Fencer04 può essere fatto senza danneggiare il core di WP, vedi la mia risposta. In molti casi ha senso. I reindirizzamenti sono negativi e tecnicamente non sono il caso d'uso corretto - invece di reindirizzare un URL esistente, è meglio non avere quell'URL in primo luogo se non lo usi. Inoltre, ad ogni richiesta WP analizza tutti gli array di regole di riscrittura finché non trova la prima corrispondenza, li valuta utilizzando espressioni regolari, il che è lento. Un array più piccolo di regole significa prestazioni migliori. Per questo motivo, spesso rimuovo date, archivi degli autori, embed, feed ecc. - fondamentalmente tutte le funzionalità che non vengono utilizzate nel progetto.

Ihor Vorotnov Ihor Vorotnov
23 giu 2017 13:14:53
Tutte le risposte alla domanda 4
6
13

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.

23 giu 2017 13:05:38
Commenti

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?

italiansoda italiansoda
13 lug 2017 20:25:49

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

Ola Ola
2 ott 2018 12:21:25

Il plugin Yoast SEO gestisce questa funzionalità perfettamente.

wp-mario.ru wp-mario.ru
8 mag 2020 16:01:12

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.

wp-mario.ru wp-mario.ru
8 mag 2020 16:06:07

@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.

Ihor Vorotnov Ihor Vorotnov
11 mag 2020 17:49:53

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.

Tom J Nowell Tom J Nowell
13 gen 2024 21:18:01
Mostra i restanti 1 commenti
1
10

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.

20 mag 2021 15:45:05
Commenti

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

Nicolas Guérinet Nicolas Guérinet
1 nov 2023 11:28:38
0

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

6 nov 2020 07:10:09
0

Questa è ora l'impostazione predefinita in WP 6.4 e può essere configurata utilizzando l'opzione wp_attachment_pages_enabled. Le modifiche sono possibili:

  1. tramite CLI: wp option set wp_attachment_pages_enabled 0|1
  2. visitando /wp-admin/options.php
  3. 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/

13 gen 2024 21:28:27