如何强制媒体管理器覆盖同名文件?

时间:2011-09-13 作者:N2Mystic

我有一个与我的主题一起工作的小部件,它期望图像以某种方式命名,slide1。png,幻灯片2。png等。。。

但是,当用户上载自己的图像时,名为slide1。png,幻灯片2。WordPress将替换图像的名称更改为slide11,而不是用新图像更新图像。png,幻灯片22。png等

我可以在主题选项中设置一个过滤器,告诉WP在不更改文件名的情况下覆盖现有图像吗?

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

这是我做的一些东西,主要来自插件Overwrite Uploads 但是没有额外的东西

add_filter(\'wp_handle_upload_overrides\',\'noneUniqueFilename\');
function noneUniqueFilename($overrides){
    $overrides[\'test_form\'] = false;
    $overrides[\'unique_filename_callback\'] = \'nonUniqueFilenameCallback\';
    return $overrides;
}

function nonUniqueFilenameCallback($directory, $name, $extension){
    $filename = $name . strtolower($extension);
    //remove old attachment
    removeOldAttach($filename);

    return $filename;
}

function removeOldAttach($filename){
    $arguments = array(
        \'numberposts\'   => -1,
        \'meta_key\'      => \'_wp_attached_file\',
        \'meta_value\'    => $filename,
        \'post_type\'     => \'attachment\'
    );
    $Attachments_to_remove = get_posts($arguments);

    foreach($Attachments_to_remove as $a)
        wp_delete_attachment($a->ID, true);
}

SO网友:brasofilo

我使用了一点@Bainternet的答案,在不破坏核心的情况下完成了这项工作。

此其他问题(&;A也很有帮助:query_posts: how to show all 'meta_value' containing a specific word?

功能wp_unique_filename 有过滤器sanitize_file_name 刚开始的时候,我们就可以钩住它,检查并移除重复的附件。

我做了基本的本地主机测试,请在应用到实时站点之前进行彻底测试。

add_filter( \'sanitize_file_name\', \'filename_filter_wpse_28439\', 10, 1 );

function filename_filter_wpse_28439( $name ) 
{
    $args = array(
        \'numberposts\'   => -1,
        \'post_type\'     => \'attachment\',
        \'meta_query\' => array(
                array( 
                    \'key\' => \'_wp_attached_file\',
                    \'value\' => $name,
                    \'compare\' => \'LIKE\'
                )
            )
    );
    $attachments_to_remove = get_posts( $args );

    foreach( $attachments_to_remove as $attach )
        wp_delete_attachment( $attach->ID, true );

    return $name;
}

结束

相关推荐

404从wp-Content/Uploads/获取图像时

我在获取图像时获得404状态,http仍然包含该图像。图像显示在浏览器中,但404代码中断了一些应用程序。对wp内容/上载/的调用被重定向到。htaccess:<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\\.php$ - [L] RewriteRule (.*) /index.php?getfile=$1 [L] </IfModule>&