it-swarm.com.de

Unerwünschte URLs der Medienbibliothek in Beiträgen?

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?

13
Jeff Atwood

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 als Dateien betrachtet, sondern 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, was bedeutet, dass sie immer eine URL für sie sind).

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 . Öffne die Datei, entferne die Schleife, speichere ... und lade eine der Anhangseiten (wie die, die du zuvor angegeben hast).

Mein Punkt ist, 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 genau das gepostet, einen attachment.php, der in Ihrem /themes-Ordner abgelegt ist und umgeleitet wird:

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

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 die neu geschriebenen Anhänge, aktualisiert die Anhangsverknüpfungen so, dass sie auf die Anhangsdatei verweisen (anstatt auf deren Permalink), entfernt die Anhangsabfragevariablen und entfernt auch die Möglichkeit, Anhänge mit dem jetzt nicht vorhandenen Anhangspermalink zu verknüpfen.

Offen für Kritik. :)

6
t31os

Sie können eine 301-Weiterleitung für Anhänge an die übergeordnete Seite 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 );
    }       
}
5
Ashfame

Yoast SEO Plugin hat unter Permalinks "Redirect attachment URLs to parent post URL". Ich habe diese Option verwendet, um das Problem zu beheben. Das Plugin ist unglaublich.

5

Dies ist eine verwandte Antwort von einer verwandten Frage: Anhangsseiten vollständig deaktivieren

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.

https://wordpress.stackexchange.com/a/271089/71608

0
italiansoda