Unerwünschte URLs der Medienbibliothek in Beiträgen?

14

Als ich ein bisschen in Google nach Inhalten in unserem Blog suchte, bemerkte ich zu meinem Schock und Entsetzen, dass einzelne Bilder aus der Medienbibliothek irgendwie ihre eigenen URLs generieren, die Google irgendwie findet und indiziert!

Zum Beispiel diese Seite:
http://blog.stackoverflow.com/2008/08/special-development-team-podcast/

Enthält dieses Bild:
http://blog.stackoverflow.com/wp-content/uploads/bio-jarrod-dixon.jpg

Das ist in Ordnung, aber irgendwie wird dieses Bild auch als eigene URL und "Post" angezeigt :
http://blog.stackoverflow.com/2008/08/special-development-team-podcast/bio-jarrod-dixon/

Das ist extrem unerwünscht!

Ich habe die Medieneinstellungen in WordPress überprüft und die Medienbibliothek durchsucht, kann jedoch keine Möglichkeit finden, dieses Verhalten zu deaktivieren. Irgendwelche Ideen?

Jeff Atwood
quelle

Antworten:

7

Das, was Sie sagen, ist unerwünscht, ist eine normale Funktionalität unter WordPress und kann nicht entfernt werden. Es gibt jedoch Dinge, die Sie tun können, um die unerwünschte URL auf etwas Nützlicheres zu verweisen.

Hier ist ein Forumsbeitrag zu diesem Problem mit einigen interessanten Korrekturen und einer Beschreibung dessen, was gerade passiert:

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

Anhänge sind eigentlich ein Beitragstyp. Sie nehmen also eine Zeile in der Beitragstabelle ein, wie ein Beitrag. Sie haben immer eine URL zur Verfügung, so wie Beiträge dies tun.

dh example.com/?p=16

16 ist die Beitrags-ID und wie Beiträge sind sie immer über eine URL wie die oben angegebene verfügbar. Mediendateien werden nicht einfach nur als Dateien betrachtet, sie haben ein inhaltsähnlicheres Element, da sie einen entsprechenden Datensatz in der Beitragstabelle haben, genau wie ein Beitrag oder eine Seite.

Was Sie fragen, ist, wie Sie das automatische Vorhandensein einzelner Anhang-URLs für jedes Medienelement stoppen können (nicht wirklich möglich, da es sich im Wesentlichen um einen Beitragstyp handelt, das heißt, sie sind immer eine URL für sie).

Hier ist jedoch ein Vorschlag: Nehmen Sie eine beliebige Vorlagendatei (Thema), index.php, page.php, archive.php oder was auch immer Sie möchten, erstellen Sie eine Kopie und benennen Sie sie in image.php oder attachment.php um, wenn Sie alle Medien als Ziel festlegen möchten . Öffnen Sie die Datei, entfernen Sie die Schleife, speichern Sie ... und laden Sie eine der Anhangsseiten (wie die zuvor bereitgestellte).

Alles, was Sie tun müssen, ist eine Anhangsvorlagendatei zu erstellen: http://codex.wordpress.org/Template_Hierarchy
http://codex.wordpress.org/Template_Hierarchy#Attachment_display

Wenn Sie möchten, können Sie theoretisch eine Umleitung in die Anhangsvorlage einfügen, sodass einzelne Anhangsansichten umgeleitet werden (oder eine beliebige Anzahl anderer Aufgaben, die Sie möglicherweise ausführen möchten).

Jemand hat nur das, ein , attachment.phpdie in Ihrem geht /themesOrdner zu umleiten:

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

Ich dachte, es ist an der Zeit, dass ich mich zumindest bemühe, die Anhangseiten zu löschen.

Hier ist mein erster Versuch ...

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

Entfernt das erneute Schreiben von Anhängen, aktualisiert die Anhangsverknüpfungen so, dass sie auf die Anhangsdatei verweisen (anstatt auf deren Permalink), entfernt die Abfragevariablen für Anhänge und entfernt auch die Möglichkeit, Anhänge mit dem jetzt nicht vorhandenen Anhangspermalink zu verknüpfen.

Offen für Kritik. :)

t31os
quelle
5

Sie können eine 301-Umleitung für Anhänge an die Seite ihrer Eltern wie folgt durchführen:

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

Das SEO-Plugin von Yoast hat unter Permalinks die Option "URLs von Anhängen an übergeordnete Post-URL umleiten" . Ich habe diese Option verwendet, um das Problem zu beheben. Das Plugin ist unglaublich.

Zach Shallbetter
quelle
Gute Idee, aber nicht sicher, ich möchte ein ganzes Multifunktions-Plugin, um dieses eine bestimmte Problem zu lösen ..
Jeff Atwood
0

Dies ist eine verwandte Antwort von einer verwandten Frage: Deaktivieren Sie die Anlageseiten vollständig

Diese Methode ändert Umschreibregeln.

Sie können Standard-Umschreiberegeln filtern und diese für Anhänge entfernen:

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

Vergiss nicht, deine Permalinks einmal neu zu speichern. WordPress generiert neue Regeln ohne Anhänge.

/wordpress//a/271089/71608

italiansoda
quelle