URL perpustakaan media yang tidak diinginkan dalam posting?

14

Ketika melakukan sedikit pencarian Google untuk konten di blog kami, saya menyadari betapa terkejut dan ngerinya saya bahwa setiap gambar dari Media Library entah bagaimana menghasilkan URL mereka sendiri yang entah bagaimana ditemukan dan diindeks oleh Google!

Misalnya halaman ini:
http://blog.stackoverflow.com/2008/08/special-development-team-podcast/

Berisi gambar ini:
http://blog.stackoverflow.com/wp-content/uploads/bio-jarrod-dixon.jpg

Tidak masalah, tetapi entah bagaimana gambar ini juga diekspos sebagai URL dan "pos" sendiri:
http://blog.stackoverflow.com/2008/08/special-development-team-podcast/bio-jarrod-dixon/

Ini sangat tidak diinginkan!

Saya memeriksa pengaturan Media di WordPress dan melihat-lihat Perpustakaan Media, tetapi saya tidak tahu cara untuk menonaktifkan perilaku ini. Ada ide?

Jeff Atwood
sumber

Jawaban:

7

Hal yang Anda katakan tidak diinginkan hanyalah fungsionalitas normal di WordPress dan tidak dapat dihapus. Namun ada beberapa hal yang dapat Anda lakukan untuk mengarahkan URL yang tidak diinginkan ke sesuatu yang lebih bermanfaat.

Berikut ini adalah posting forum tentang masalah ini dengan beberapa perbaikan menarik dan deskripsi tentang apa yang terjadi:

http://wordpress.org/support/topic/disable-attachment-posts-without-remove-the-medias

Lampiran sebenarnya adalah jenis posting, sehingga mereka mengambil baris dalam tabel posting seperti halnya posting, mereka akan selalu memiliki URL yang tersedia, dengan cara yang sama seperti yang dilakukan posting terhadap ..

yaitu. example.com/?p=16

16 adalah ID posting, dan seperti posting mereka akan selalu tersedia dengan URL seperti di atas. File media tidak hanya dianggap file, mereka memiliki lebih banyak konten seperti elemen untuk mereka, karena mereka memiliki catatan di tabel posting yang sesuai dengan mereka, seperti halnya posting atau halaman.

Yang Anda tanyakan adalah bagaimana cara menghentikan keberadaan otomatis masing-masing URL lampiran untuk setiap item media (sebenarnya tidak mungkin karena mereka pada dasarnya adalah jenis posting, yang berarti mereka akan selalu menjadi URL untuk mereka).

Berikut sarannya, ambil file templat (tema) apa saja, index.php, page.php, archive.php atau apa pun yang Anda suka, buat salinan dan ubah nama menjadi image.php atau attachment.php jika Anda ingin menargetkan semua media . Buka file, hapus loop, simpan ... dan muat salah satu halaman lampiran (seperti yang Anda berikan sebelumnya) ..

Maksud saya, yang perlu Anda lakukan adalah membuat file templat lampiran: http://codex.wordpress.org/Template_Hierarchy
http://codex.wordpress.org/Template_Hierarchy#Attachment_display

Jika Anda mau, secara teori Anda dapat menempatkan pengalihan ke templat lampiran sehingga tampilan lampiran individual dialihkan (atau sejumlah hal lain yang mungkin ingin Anda lakukan).

Seseorang mengeposkannya saja, sebuah attachment.phpyang masuk /themeske folder Anda untuk mengalihkan:

<?php
header ('HTTP/1.1 301 Moved Permanently');
header ('Location: '.get_permalink($post->post_parent));
?>
Brady
sumber
6

Saya pikir sudah saatnya saya setidaknya mencoba tangan saya menghapus halaman lampiran.

Ini tembakan pertamaku ...

add_filter( 'attachment_fields_to_edit', 'wpse_25144_attachment_fields_to_edit', 10000, 2 );

function wpse_25144_attachment_fields_to_edit( $form_fields, $post ) {

    $url_type = get_option( 'image_default_link_type' );

    if( 'post' == $url_type ) {
        update_option( 'image_default_link_type', 'file' );
        $url_type = 'file';
    }

    $form_fields['url'] = array(
        'label'      => __('Link URL'),
        'input'      => 'html',
        'html'       => wpse_25144_image_link_input_fields( $post, $url_type ),
        'helps'      => __('Enter a link URL or click above for presets.')
    );

    return $form_fields;
}

function wpse_25144_image_link_input_fields($post, $url_type = '') {

    $file = wp_get_attachment_url($post->ID);

    if( empty( $url_type ) )
        $url_type = get_user_setting( 'urlbutton', 'file' );

    $url = '';
    if( $url_type == 'file' )
        $url = $file;

    return "
    <input type='text' class='text urlfield' name='attachments[$post->ID][url]' value='" . esc_attr($url) . "' /><br />
    <button type='button' class='button urlnone' title=''>" . __('None') . "</button>
    <button type='button' class='button urlfile' title='" . esc_attr($file) . "'>" . __('File URL') . "</button>
";
}

add_filter( 'query_vars', 'wpse_25144_query_vars', 10000, 2 );

function wpse_25144_query_vars( $wp_query_vars ) {

    foreach( $wp_query_vars as $i => $qv ) {
        if( in_array( $qv, array( 'attachment', 'attachment_id' ) ) )
            unset( $wp_query_vars[$i] );
    }
    return $wp_query_vars;
}

add_filter( 'attachment_link', 'wpse_25144_attachment_link', 10000, 2 );

function wpse_25144_attachment_link( $link, $id ) {

    $link = wp_get_attachment_url( $id );
    return $link;
}

add_filter( 'rewrite_rules_array', 'wpse_25144_rewrite_rules_array', 10000 );

function wpse_25144_rewrite_rules_array( $rewriteRules ) {

    foreach( $rewriteRules as $pattern => $query_string ) {
        if( false === strpos( $pattern, 'attachment' ) && false === strpos( $query_string, 'attachment' ) )
            continue;
        unset( $rewriteRules[$pattern] );
    }

    return $rewriteRules;
}

Menghapus penulisan ulang lampiran, memperbarui tautan lampiran untuk menunjuk pada file lampiran (bukan permalink-nya), menghapus var permintaan lampiran dan juga menghilangkan kemampuan untuk menautkan lampiran ke permalink lampiran yang sekarang tidak ada.

Terbuka untuk kritik. :)

t31os
sumber
5

Anda dapat melakukan pengalihan 301 untuk lampiran ke halaman orang tua mereka seperti ini:

<?php
/*
Plugin Name: Redirect Attachments to Parent (301)
Plugin URI: http://wordpress.stackexchange.com/questions/25144/unwanted-media-library-urls-in-posts
Description: Redirect any attachemnt pages to their parent's page with 301 redirection
Author: Ashfame
Version: 0.1
Author URI: http://www.ashfame.com/
*/

add_action( 'template_redirect', 'attachment_post_type_redirection' );

function attachment_post_type_redirection() {
    global $wp_query;       
    if ( is_attachment() ) {            
        wp_redirect( get_permalink( $wp_query->post->post_parent ), 301 );
    }       
}
Asfame
sumber
5

Plugin SEO Yoast memiliki "Redirect attachment URL's to post post URL" di bawah permalinks . Saya menggunakan opsi ini untuk menyelesaikan masalah. Plugin ini luar biasa.

Zach Shallbetter
sumber
ide yang bagus, tetapi tidak yakin saya ingin plugin multi-fungsi untuk menyelesaikan masalah yang satu ini ..
Jeff Atwood
0

Ini adalah jawaban terkait dari pertanyaan terkait: Nonaktifkan halaman lampiran sepenuhnya

Metode ini mengubah aturan penulisan ulang.

Anda dapat memfilter aturan penulisan ulang default dan menghapusnya untuk lampiran:

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

Jangan lupa untuk menyimpan kembali permalink Anda sekali. WordPress akan membuat aturan baru tanpa ada yang terkait dengan lampiran.

/wordpress//a/271089/71608

italiansoda
sumber