URL della libreria multimediale indesiderata nei post?


14

Durante un po 'di ricerca di contenuti sul nostro blog da parte di Google, ho notato con mia sorpresa e orrore che le singole immagini della Libreria multimediale stanno in qualche modo generando i propri URL che Google sta in qualche modo trovando e indicizzando!

Ad esempio questa pagina:
http://blog.stackoverflow.com/2008/08/special-development-team-podcast/

Contiene questa immagine:
http://blog.stackoverflow.com/wp-content/uploads/bio-jarrod-dixon.jpg

Va bene, ma in qualche modo questa immagine è anche esposta come proprio URL e "post":
http://blog.stackoverflow.com/2008/08/special-development-team-podcast/bio-jarrod-dixon/

Questo è estremamente indesiderato!

Ho controllato le impostazioni multimediali in WordPress e ho cercato nel Catalogo multimediale ma non riesco a trovare un modo per disabilitare questo comportamento. Qualche idea?

Risposte:


7

Questa cosa che stai dicendo è indesiderata è solo la normale funzionalità in WordPress e non può essere rimossa. Tuttavia ci sono cose che puoi fare per indirizzare l'URL indesiderato verso qualcosa di più utile.

Ecco un post sul forum su questo problema con alcune correzioni interessanti e una descrizione di ciò che sta accadendo:

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

Gli allegati sono in realtà un tipo di post, quindi prendono una riga nella tabella dei post come fa un post, avranno sempre un URL disponibile, proprio come fanno i post per ...

vale a dire. example.com/?p=16

16 è l'ID del post e, come i post, saranno sempre disponibili tramite un URL come il precedente. I file multimediali non sono semplicemente considerati file, hanno più contenuto come elemento, in quanto hanno un record nella tabella dei post che li corrisponde, proprio come fa un post o una pagina.

Quello che stai chiedendo è come fermare l'esistenza automatica dei singoli URL degli allegati per ogni elemento multimediale (non è davvero possibile perché sono essenzialmente un tipo di post, il che significa che saranno sempre un URL per loro).

Ecco un suggerimento, prendi qualsiasi file modello (tema), index.php, page.php, archive.php o qualunque cosa ti piaccia, crea una copia e rinominalo in image.php o allegato.php se vuoi scegliere come target tutti i media . Apri il file, rimuovi il loop, salva ... e carica una delle pagine degli allegati (come quella che hai fornito prima) ..

Il mio punto è che tutto ciò che devi fare è creare un file modello allegato: http://codex.wordpress.org/Template_Hierarchy
http://codex.wordpress.org/Template_Hierarchy#Attachment_display

Se lo si desidera, in teoria è possibile inserire un reindirizzamento nel modello di allegato in modo da reindirizzare le singole visualizzazioni degli allegati (o qualsiasi numero di altre cose che si potrebbero desiderare di fare).

Qualcuno ha pubblicato proprio questo, uno attachment.phpche va nella tua /themescartella per reindirizzare:

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

6

Ho pensato che fosse ora che almeno provassi a cancellare le pagine degli allegati.

Ecco il mio primo colpo ad esso ...

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

Rimuove le riscritture degli allegati, aggiorna i collegamenti degli allegati in modo che puntino al file allegato (anziché al suo permalink), rimuove le query di query degli allegati e rimuove anche la possibilità di collegare gli allegati al permalink degli allegati ora inesistente.

Aperto alla critica. :)


5

Puoi fare un reindirizzamento 301 per gli allegati alla pagina dei loro genitori in questo modo:

<?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

Il plug-in SEO di Yoast ha "Reindirizza URL allegato a URL post padre" sotto permalink . Ho usato questa opzione per risolvere il problema. Il plugin è fantastico.


buona idea, ma non sono sicuro di volere un intero plugin multi-funzione per risolvere questo particolare problema ..
Jeff Atwood

0

Questa è una risposta correlata da una domanda correlata: disabilitare completamente le pagine degli allegati

Questo metodo modifica le regole di riscrittura.

Puoi filtrare le regole di riscrittura predefinite e rimuoverle per gli allegati:

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

Non dimenticare di salvare nuovamente i permalink una volta. WordPress genererà nuove regole senza nulla correlato agli allegati.

/wordpress//a/271089/71608

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.