Нежелательные медиа библиотеки URL в сообщениях?

14

При поиске контента в нашем блоге в Google я с ужасом и ужасом заметил, что отдельные изображения из библиотеки мультимедиа каким-то образом генерируют свои собственные URL-адреса, которые Google каким-то образом находит и индексирует!

Например, эта страница:
http://blog.stackoverflow.com/2008/08/special-development-team-podcast/

Содержит это изображение:
http://blog.stackoverflow.com/wp-content/uploads/bio-jarrod-dixon.jpg

Это нормально, но каким-то образом это изображение также отображается в виде своего собственного URL и «сообщения»:
http://blog.stackoverflow.com/2008/08/special-development-team-podcast/bio-jarrod-dixon/

Это крайне нежелательно!

Я проверил настройки мультимедиа в WordPress и просмотрел библиотеку мультимедиа, но не могу найти способ отключить это поведение. Есть идеи?

Джефф Этвуд
источник

Ответы:

7

То, что вы говорите, является нежелательным, это просто нормальная функциональность под WordPress, и ее нельзя удалить. Однако есть вещи, которые вы можете сделать, чтобы указать нежелательный URL на что-то более полезное.

Вот сообщение на форуме по этой проблеме с некоторыми интересными исправлениями и описанием того, что происходит:

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

Вложения на самом деле относятся к типу сообщений, поэтому они занимают строку в таблице сообщений, как и сообщение, у них всегда будет доступен URL-адрес, точно так же, как и сообщения ..

то есть. example.com/?p=16

16 - это идентификатор сообщения, и, как и сообщения, они всегда будут доступны по URL, как указано выше. Медиа-файлы не просто рассматриваются как файлы, они имеют более похожий на контент элемент в том смысле, что у них есть запись в таблице публикаций, которая соответствует им, точно так же, как запись или страница.

Вы спрашиваете, как остановить автоматическое существование отдельных URL-адресов вложений для каждого элемента мультимедиа (на самом деле это невозможно, поскольку они по сути являются типом записей, а это означает, что они всегда будут для них URL).

Вот предложение, однако, возьмите любой файл шаблона (темы), index.php, page.php, archive.php или что угодно, создайте копию и переименуйте ее в image.php или attachment.php, если вы хотите настроить таргетинг на все медиа , Откройте файл, удалите цикл, сохраните ... и загрузите одну из страниц вложения (например, ту, которую вы указали ранее).

С моей точки зрения, все, что вам нужно сделать, это создать файл шаблона вложения: http://codex.wordpress.org/Template_Hierarchy
http://codex.wordpress.org/Template_Hierarchy#Attachment_display

Если вы хотите, теоретически вы можете поместить перенаправление в шаблон вложения, чтобы перенаправлять отдельные представления вложения (или любое другое количество вещей, которые вы можете захотеть сделать).

Кто-то опубликовал только это, attachment.phpчто идет в вашу /themesпапку для перенаправления:

<?php
header ('HTTP/1.1 301 Moved Permanently');
header ('Location: '.get_permalink($post->post_parent));
?>
Brady
источник
6

Я подумал, что пора, по крайней мере, попробовать свои силы, чтобы стереть страницы с вложениями.

Вот мой первый выстрел в это ...

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

Удаляет вложение, перезаписывает, обновляет ссылки на вложения так, чтобы они указывали на файл вложения (вместо его постоянной ссылки), удаляет переменные запроса вложения, а также удаляет возможность связывать вложения с уже не существующей постоянной ссылкой вложения.

Открыта для критики. :)

t31os
источник
5

Вы можете сделать перенаправление 301 для вложений на страницу их родителей следующим образом:

<?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 );
    }       
}
Ashfame
источник
5

SEO плагин Yoast имеет «Перенаправлять URL-адреса вложений на родительский пост» под постоянными ссылками . Я использовал эту опцию, чтобы решить проблему. Плагин потрясающий.

Зак Шалбеттер
источник
хорошая идея, но не уверен, что я хочу, чтобы целый многофункциональный плагин решил эту конкретную проблему ..
Джефф Этвуд
0

Это связанный ответ на связанный вопрос: полностью отключить вложения

Этот метод изменяет правила перезаписи.

Вы можете отфильтровать правила перезаписи по умолчанию и удалить их для вложений:

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

Не забудьте повторно сохранить ваши постоянные ссылки один раз. WordPress будет генерировать новые правила, не связанные с вложениями.

/wordpress//a/271089/71608

italiansoda
источник