私は私のテーマで動作するウィジェットを持っていて、それはある意味で名前が付けられた画像を期待しています、slide1.png、slide2.png、等。
しかし、ユーザーが独自の画像をslide1.png、slide2.pngなどの名前でメディアライブラリにアップロードすると、画像を新しい画像で更新するのではなく、WordPressは置き換え画像の名前をslide11.png、slide22に変更します。 PNGなど
ファイル名を変更せずに既存の画像を上書きするようにWPに指示するフィルタをテーマオプションに設定できますか?
これは私が作ったもので、主にプラグイン 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);
}
コアをハックすることなく、@ Bainternet's Answerを使ってこの作業を成功させました。
この他のQ&Aも役に立ちました。 query_posts:特定の単語を含むすべての「meta_value」を表示する方法
wp_unique_filename
関数の先頭にフィルタsanitize_file_name
があるので、そこでフックして重複した添付ファイルのチェックと削除を行うことができます。
私は基本的なlocalhostのテストをしました。ライブサイトに申し込む前に徹底的にテストしてください。
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;
}