Dezactivează complet paginile de atașamente

31 aug. 2016, 18:54:10
Vizualizări: 16.5K
Voturi: 13

Doresc să dezactivez complet toate paginile de atașamente. Am căutat pe Google, dar am găsit doar informații despre cum să redirecționezi către articolul părinte sau pagina principală. Nu aș numi asta o soluție elegantă. De ce să introduci permalink-uri inutile care redirecționează către pagina principală? Nu se poate dezactiva complet?

3
Comentarii

Ce înseamnă "dezactivat complet"? Când adăugați fișiere media, URL-urile sunt create automat. Nu știu dacă puteți dezactiva această acțiune fără a afecta nucleul WordPress.

De ce redirecționarea nu este o soluție elegantă? Care este problema cu URL-urile atașamentelor? Nu judec, doar încerc să înțeleg pentru a putea oferi o soluție.

Fencer04 Fencer04
31 aug. 2016 20:35:08

Mi se pare inutil ca fiecare fișier pe care îl încarc să aibă propria pagină cu un permalink. Nu pot să-mi imaginez multe scenarii de utilizare pentru ele. Majoritatea oamenilor doar doresc să încarce fișiere pentru a le linkui, nu să creeze o pagină separată pentru a le afișa.

Maciej Kravchyk Maciej Kravchyk
1 sept. 2016 08:19:49

@Fencer04 se poate face fără a afecta nucleul WP, vezi răspunsul meu. În multe cazuri are sens. Redirecționările sunt proaste și tehnic nu reprezintă cazul de utilizare corect - în loc să redirecționezi un URL existent, e mai bine să nu ai acel URL de la început dacă nu-l folosești. De asemenea, la fiecare cerere WP scanează întregul array de reguli de rescriere până găsește prima potrivire, le evaluează folosind expresii regulate, ceea ce este lent. Un array mai mic de reguli înseamnă performanță mai bună. Din acest motiv, adesea elimin arhivele cu date, arhivele autorilor, embed-urile, feed-urile etc - practic toate funcționalitățile care nu sunt folosite în proiect.

Ihor Vorotnov Ihor Vorotnov
23 iun. 2017 13:14:53
Toate răspunsurile la întrebare 4
6
13

Puteți filtra regulile implicite de rescriere și elimina cele pentru atașamente:

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' );

Nu uitați să resalvați permalinkurile o dată. WordPress va genera noi reguli fără nicio legătură cu atașamentele.

Acum, URL-ul paginii de atașament va returna eroarea 404. Puteți adăuga și o redirecționare pentru a preveni pagina 404, deoarece este inutilă în acest caz. Dar nu sunt sigur cum să prindem redirecționarea - is_attachment() nu va funcționa dacă regulile de rescriere au fost eliminate.

Actualizare:

WordPress va continua să ofere URL-uri frumoase pentru pagina de atașament în biblioteca media și dialogul de inserare media. Puteți filtra și acest lucru:

function cleanup_attachment_link( $link ) {
    return;
}
add_filter( 'attachment_link', 'cleanup_attachment_link' );

În acest caz, chiar și atunci când inserați un atașament într-un articol și selectați "Legătură către pagina de atașament", imaginea va fi inserată fără link.

23 iun. 2017 13:05:38
Comentarii

Ar fi posibil să setăm rewrite-ul să fie URL-ul fișierului media (legat la wp-content/uploads) în loc de o pagină generată automat?

italiansoda italiansoda
13 iul. 2017 20:25:49

Da, aș dori să am posibilitatea de a redirecționa toate paginile de atașamente către URL-ul fișierului :)

Ola Ola
2 oct. 2018 12:21:25

Plugin-ul Yoast SEO gestionează acest lucru perfect.

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

Apropo, acest cod nu funcționează complet. Dacă atașamentul este încărcat pentru un articol sau pagină, atunci totul funcționează corespunzător. Dacă doar încărcați un atașament în biblioteca de media, pagina acestuia se deschide în continuare.

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

@Mario62RUS 1. Nu toată lumea folosește Yoast SEO. Unii oameni urăresc balastul pe care îl aduce. E ca un cancer pentru interfața ta de administrare. 2. Da, lucrurile s-au schimbat de la versiunea 5.0 și Gutenberg. Acest cod ar trebui revizuit.

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

rețineți că în WP 6.4 există un comutator pentru a dezactiva atașamentele, acest răspuns nu împiedică apariția acestora în sitemap-ul de bază WP, nu oprește punctele finale REST API ale atașamentelor care conțin URL-ul, nu dezactivează permalink-urile urâte ale paginilor de atașamente sau ascunde opțiunea în interfețele UI ale galeriei/imagini/bibliotecii media, etc.

Tom J Nowell Tom J Nowell
13 ian. 2024 21:18:01
Arată celelalte 1 comentarii
1
10

Dacă dorești să dezactivezi complet paginile media, ar trebui să folosești un cod de răspuns 404 în loc de redirecționare. Acest lucru poate fi realizat cu următorul cod:

function wpse237762_set_404() {
    if (is_attachment()) {
        global $wp_query;
        $wp_query->set_404();
        status_header(404);
    }
}

// Acest cod va afișa eroarea 404 pe pagina de atașament
add_filter('template_redirect', 'wpse237762_set_404');

// Acest cod va afișa eroarea 404 în loc să redirecționeze către pagina de atașament atunci când se folosește o bară oblică la sfârșit
add_filter('redirect_canonical', 'wpse237762_set_404', 0);

Pentru a păstra funcționale linkurile către paginile de atașament și a le redirecționa direct către fișier, poți folosi următorul cod:

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);

Pentru a preveni ca paginile de atașament să rezerve slug-uri din paginile normale, poți folosi acest cod pentru a seta toate slug-urile noilor atașamente la valori aleatorii (UUIDv4 în acest caz)

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);

Acest lucru va preveni ca o imagine numită products.jpeg să rezerve URL-ul https://example.com/products. Acest lucru ar duce la faptul că o pagină numită Produse să primească URL-ul https://example.com/products-2, ceea ce evident nu ar fi prea bine.

Am combinat acest cod în plugin-ul Disable Attachment Pages, care include și o unealtă pentru a amesteca slug-urile existente ale atașamentelor, astfel încât să nu creeze probleme în viitor.

20 mai 2021 15:45:05
Comentarii

Atenție. Această linie add_filter('redirect_canonical', 'wpse237762_set_404', 0); de asemenea dezactivează redirecționările shortlink-urilor WordPress precum domeniultau.com/?p=2570

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

Pentru cei care nu folosesc plugin-uri sau preferă o metodă ușoară. Aceasta ar putea fi de ajutor.

Această metodă redirecționează atașamentul către fișierul exact în loc de pagina de atașament și este metoda pe care o folosesc unele plugin-uri.

Pentru a testa, adăugați următorul cod în functions.php al temei.

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;
}

Referințe: is_attachment wp_redirect

6 nov. 2020 07:10:09
0

Acum aceasta este setarea implicită în WP 6.4 și poate fi configurată folosind opțiunea wp_attachment_pages_enabled. Modificările sunt posibile

  1. prin CLI: wp option set wp_attachment_pages_enabled 0|1
  2. vizitând /wp-admin/options.php
  3. prin intermediul unui mic plugin

Când această opțiune este setată la 0:

  • paginile de atașament nu mai apar în interfața grafică ca opțiune atunci când se utilizează imagini/galerii
  • URL-urile paginilor de atașament sunt redirecționate către fișierele originale pentru utilizatorii autentificați
  • hărțile site-ului/endpoint-urile REST API etc. utilizează URL-ul original de încărcare

Mai multe detalii la https://make.wordpress.org/core/2023/10/16/changes-to-attachment-pages/

13 ian. 2024 21:28:27