URLs de bibliotecas de mídia indesejadas nas postagens?

12

Ao fazer um pouco de busca no Google por conteúdo em nosso blog, percebi, para meu choque e horror, que imagens individuais da Biblioteca de Mídia estão de alguma forma gerando seus próprios URLs que o Google está de alguma forma encontrando e indexando!

Por exemplo, esta página:
enlace

Contém esta imagem: enlace

O que é bom, mas de alguma forma essa imagem também é exposta como sua própria URL e "post": enlace

Isto é extremamente indesejado!

Eu verifiquei as configurações de mídia no WordPress e naveguei pela Biblioteca de mídia, mas não consigo descobrir uma maneira de desabilitar esse comportamento. Alguma idéia?

    
por Jeff Atwood 06.08.2011 / 11:49

5 respostas

7

Essa coisa que você está dizendo não é desejada é apenas uma funcionalidade normal no WordPress e não pode ser removida. No entanto, existem coisas que você pode fazer para apontar o URL indesejado para algo mais útil.

Aqui está uma postagem no fórum sobre esse problema com algumas correções interessantes e uma descrição do que está acontecendo:

enlace

  

Anexos são, na verdade, um tipo de postagem, então eles ocupam uma linha na tabela de postagens como uma postagem, eles sempre terão uma URL disponível, da mesma forma que as postagens para ..

     

ie. example.com/?p=16

     

16 é o ID do post e, assim como as postagens, sempre estarão disponíveis por um URL como o acima. Os arquivos de mídia não são simplesmente considerados arquivos, eles têm mais conteúdo como elemento para eles, pois eles têm um registro na tabela de publicações que corresponde a eles, assim como um post ou uma página.

     

O que você está perguntando é como parar a existência automática de URLs de anexos individuais para cada item de mídia (isso não é realmente possível porque eles são basicamente um tipo de postagem, o que significa que sempre serão um URL para eles). / p>      

Aqui está uma sugestão, pegue qualquer arquivo de template (tema), index.php, page.php, archive.php ou o que você quiser, crie uma cópia e renomeie para image.php ou attachment.php se você quiser segmentar todas as mídias. Abra o arquivo, remova o loop, salve ... e carregue uma das páginas de anexo (como a que você forneceu antes).

     

Meu ponto de vista, tudo que você precisa fazer é criar um arquivo de modelo de anexo:    enlace
enlace

     

Se você quisesse, teoricamente, poderia inserir um redirecionamento no modelo de anexo para redirecionar as visualizações de anexos individuais (ou qualquer outra coisa que você queira fazer).

Alguém postou apenas isso, um attachment.php que entra na sua pasta /themes para redirecionar:

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

Eu percebi que já era hora de eu pelo menos tentar acabar com as páginas de anexos.

Aqui está minha primeira foto ...

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

Remove o anexo reescreve, atualiza os links de anexo para apontar para o arquivo de anexo (em vez de permalink), remove as variáveis de consulta de anexo e também remove a capacidade de vincular anexos ao permalink de anexo agora inexistente.

Aberto à crítica. :)

    
por t31os 06.08.2011 / 15:45
5

Você pode fazer um redirecionamento 301 para anexos na página de seus pais assim:

<?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 );
    }       
}
    
por Ashfame 06.08.2011 / 14:05
5

O plug-in de SEO do Yoast tem "Redirecionar URL de anexo para URL de postagem pai" em permalinks . Usei essa opção para resolver o problema. O plugin é incrível.

    
por Zach Shallbetter 06.08.2011 / 15:07
0

Esta é uma resposta relacionada de uma questão relacionada: Desative completamente as páginas de anexos

Este método modifica regras de reescrita.

  

Você pode filtrar as regras padrão de reescrita e removê-las para anexos:

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

Não se esqueça de salvar novamente seu   permalinks uma vez. WordPress irá gerar novas regras sem nada   relacionados a anexos.

enlace

    
por italiansoda 13.07.2017 / 18:41