帖子中出现不需要的媒体库URL?

时间:2011-08-06 作者:Jeff Atwood

在谷歌搜索我们博客上的内容时,我震惊地注意到,媒体库中的单个图像正在以某种方式生成自己的URL,而谷歌正在以某种方式查找和索引这些URL!

例如,此页面:
http://blog.stackoverflow.com/2008/08/special-development-team-podcast/

包含此图像:
http://blog.stackoverflow.com/wp-content/uploads/bio-jarrod-dixon.jpg

这很好,但不知何故,此图像也以其自己的URL和“post”公开:http://blog.stackoverflow.com/2008/08/special-development-team-podcast/bio-jarrod-dixon/

这是非常不需要的!

我检查了WordPress中的媒体设置并浏览了媒体库,但我想不出一种方法来禁用此行为。有什么想法吗?

5 个回复
最合适的回答,由SO网友:Scott 整理而成

您所说的不需要的东西只是WordPress下的正常功能,无法删除。然而,您可以做一些事情来将不需要的URL指向更有用的内容。

以下是一篇关于此问题的论坛帖子,其中包含一些有趣的修复程序,并描述了正在发生的情况:

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

附件实际上是一种帖子类型,所以它们像帖子一样在posts表中占有一行,它们总是有一个可用的URL,就像帖子一样。。

ie。example.com/?p=16

16是帖子ID,像帖子一样,它们总是可以通过上面的URL访问。媒体文件不是简单的文件,它们有一个更像内容的元素,因为它们在posts表中有一个与其对应的记录,就像post或页面一样。

您要问的是如何停止每个媒体项目的单独附件URL的自动存在(实际上不可能,因为它们本质上是一种帖子类型,这意味着它们始终是它们的URL)。

不过,这里有一个建议,可以使用任何模板(主题)文件,索引。php,第页。php,存档。php或任何您喜欢的东西,创建一个副本并将其重命名为image。php或附件。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));
?>

SO网友:t31os

我想至少是时候尝试一下删除附件页了。

这是我的第一次尝试。。。

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;
}
删除附件重写,更新附件链接以指向附件文件(而不是永久链接),删除附件查询变量,并删除将附件链接到现在不存在的附件永久链接的功能。

接受批评。:)

SO网友:Ashfame

您可以对其父页面的附件执行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 );
    }       
}

SO网友:Zach Shallbetter

Yoast\'s SEO plugin 在下面有“将附件URL重定向到父帖子URL”permalinks. 我使用此选项来解决问题。这个插件太棒了。

SO网友:italiansoda

这是一个相关问题的相关答案:Disable attachment pages completely

此方法修改重写规则。

您可以筛选默认重写规则并删除附件的重写规则:

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将生成与附件无关的新规则。

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

结束

相关推荐

Changing attachment urls?

如何更改附件页URL的格式/[post-url]/[attachment-name]/ 到/media/[attachment-name]/? 我知道我可以覆盖get_attachment_link 通过attachment_link 过滤器,但我想我需要更改重定向结构,以便WordPress知道如何处理这些URL?