Я использую плагин Add From Server http://wordpress.org/extend/plugins/add-from-server/, в основном он импортирует / загружает изображение с сервера. В настоящее время плагин копирует изображения в формат месяца / года, но я хочу изменить его, сделав его скопированным в формате папки Post ID вместо месяца / года.
Я уже пробовал использовать плагин Custom Upload Dir, но он не работает с плагином Add From Server вместе. Может ли кто-нибудь настроить плагин Add From Server, чтобы он загружался по идентификатору сообщения?
Вы можете попробовать добавить это в свой файл functions.php
:
add_filter( 'upload_dir','wpse87234_upload_dir'); function wpse87234_upload_dir($uploads){ // check if we are in the "Add From Server" media tab if (isset($_REQUEST['post_id']) && isset($_GET['tab']) && $_GET['tab']=="server") { $prefix="post_"; $post_id=(int)$_REQUEST['post_id']; // change the uploads info to our needs: $uploads['subdir']="/".$prefix.$post_id; $uploads['path']=$uploads['basedir'].$uploads['subdir']; $uploads['url']=$uploads['baseurl'].$uploads['subdir']; } return $uploads; }
Это должно /wp-content/uploads/post_1234/
каталог как /wp-content/uploads/post_1234/
с post_id
1234.
Из источника плагинов : wp_upload_dir()
и wp_insert_attachment()
, который использует update_attached_file()
. Поэтому в основном плагин должен просто включать ваши настройки мультимедиа. Если он этого не делает, он имеет конфликт с каким-либо другим плагином или с настройками wp-config.php.
Вы все равно можете использовать 'upload_dir'
-фильтр. Он принимает один аргумент, который имеет следующие данные:
array( 'path' => $dir, 'url' => $url, 'subdir' => $subdir, 'basedir' => $basedir, 'baseurl' => $baseurl, 'error' => false, )
Просто добавьте обратный вызов:
add_filter( 'upload_dir', 'wpse87234_custom_upload_dir' ); function wpse87234_custom_upload_dir( $data ) { // Change everything you need. return array_merge( $data, array( 'path' => $data['dir'], 'url' => $data['url'], 'subdir' => $data['subdir'], 'basedir' => $data['basedir'], 'baseurl' => $data['baseurl'], 'error' => false, ) ); }