Yayınlardaki istenmeyen medya kitaplığı URL'leri?


14

Blogumuzda içerik ararken Google'ı biraz yaparken, Medya Kütüphanesi'ndeki tek tek görüntülerin bir şekilde Google'ın bir şekilde bulduğu ve dizine eklediği kendi URL'lerini oluşturduğunu gördüm.

Örneğin bu sayfa:
http://blog.stackoverflow.com/2008/08/special-development-team-podcast/

Bu resmi içerir:
http://blog.stackoverflow.com/wp-content/uploads/bio-jarrod-dixon.jpg

Bu iyi, ancak bir şekilde bu resim kendi URL'si ve "gönderisi" olarak da ortaya çıkıyor:
http://blog.stackoverflow.com/2008/08/special-development-team-podcast/bio-jarrod-dixon/

Bu son derece istenmeyen bir durum!

WordPress'teki Medya ayarlarını kontrol ettim ve Medya Kitaplığı'na göz attım, ancak bu davranışı devre dışı bırakmanın bir yolunu bulamıyorum. Herhangi bir fikir?

Yanıtlar:


7

İstediğiniz söylenmeyen şey, WordPress altındaki normal bir işlevdir ve kaldırılamaz. Bununla birlikte, istenmeyen URL'yi daha kullanışlı bir şeye yönlendirmek için yapabileceğiniz şeyler vardır.

İşte bu konuda bazı ilginç düzeltmeler ve neler olduğuna dair bir açıklama içeren bir forum yazısı:

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

Ekler aslında bir yazı tipidir, bu nedenle yazı tablosunda bir yazı gibi bir satır alırlar, yayınların yaptığı gibi her zaman kullanılabilir bir URL'ye sahip olurlar.

yani. example.com/?p=16

16, posta kimliğidir ve yayınlar gibi her zaman yukarıdaki gibi bir URL tarafından kullanılabilir. Medya dosyaları sadece dosyalar olarak kabul edilmez, yazı veya sayfada olduğu gibi yazı tablosunda bunlara karşılık gelen bir kaydı olması nedeniyle onlara daha çok içerik gibi içerikler vardır.

Sorduğunuz şey, her bir medya öğesi için ayrı ek URL'lerinin otomatik varlığını nasıl durduracağınızdır (aslında bir posta türü oldukları için mümkün değildir, bu da onlar için her zaman bir URL olacakları anlamına gelir).

Yine de bir öneri, herhangi bir şablon (tema) dosyası, index.php, page.php, archive.php veya istediğinizi alın, bir kopya oluşturun ve tüm medyayı hedeflemek istiyorsanız image.php veya attachment.php olarak yeniden adlandırın . Dosyayı açın, döngüyü kaldırın, kaydedin ... ve ek sayfalardan birini yükleyin (daha önce sağladığınız gibi).

Demek istediğim, tek yapmanız gereken bir eklenti şablon dosyası oluşturmak: http://codex.wordpress.org/Template_Hierarchy
http://codex.wordpress.org/Template_Hierarchy#Attachment_display

İsterseniz, teorik olarak, ek şablonuna, tek tek ek görünümlerinin (veya yapmak isteyebileceğiniz başka birçok şeyin) yeniden yönlendirilmesi için bir yönlendirme yerleştirebilirsiniz.

Birisi sadece bunu gönderdi, yeniden yönlendirmek attachment.phpiçin /themesklasörünüze giden:

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

6

En azından ek sayfalarını silmede elimi denemenin zamanı geldiğini anladım.

İşte ilk atışım ...

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

Ek yeniden yazmalarını kaldırır, ek bağlantılarını ek dosyasında (kalıcı bağlantı yerine) olacak şekilde güncelleştirir, ek sorgu değişkenlerini kaldırır ve ekleri artık mevcut olmayan ek kalıcı bağlantısına bağlama yeteneğini de kaldırır.

Eleştiriye açık. :)


5

Üst öğelerinin sayfasına bu şekilde ekler için 301 yönlendirmesi yapabilirsiniz:

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

5

Yoast'ın SEO eklentisinde kalıcı bağlantılar altında "Ek URL'leri üst yazı URL'sine yönlendir" var . Bu seçeneği sorunu çözmek için kullandım. Eklenti inanılmaz.


iyi fikir, ama emin değilim ben bu belirli bir sorunu çözmek için bütün bir çok fonksiyonlu eklenti istiyorum ..
Jeff Atwood

0

Bu, ilgili bir sorunun yanıtlarıdır: Ek sayfalarını tamamen devre dışı bırak

Bu yöntem, yeniden yazma kurallarını değiştirir.

Varsayılan yeniden yazma kurallarını filtreleyebilir ve ekler için bunları kaldırabilirsiniz:

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

Kalıcı bağlantılarınızı bir kez daha kaydetmeyi unutmayın. WordPress, eklerle ilgili hiçbir şey yapmadan yeni kurallar oluşturacaktır.

/wordpress//a/271089/71608

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.