Intereting Posts
Лучший способ вставить в очередь очень популярные скрипты, такие как bootstrap и font awesome Как получить доступ к глобальной переменной $ wp_meta_boxes на интерфейсе? RSS-каналы с несколькими категориями Лучший способ создать пользователя программно Предоставление пользователям возможности просматривать частные сообщения (в ожидании утверждения) Получить имена вариантов и имена вариантов из имени атрибута Почтовый заказ по выбранным тегам Сделать персонализированный почтовый мета сортируемый интерфейс Показать меню только if_page Как отображать категории в пользовательских типах сообщений и связывать их Показать класс из css в раскрывающемся списке формата Последние сообщения видео на главной странице некоторые продукты бесплатно, а некоторые товары не бесплатны для доставки Невозможно изменить заголовки Проверка пользовательских полей перед сохранением сообщения

Укажите пользовательский путь загрузки только для настраиваемого типа сообщений?

У меня есть пользовательский тип сообщений «клиенты» и хотел бы, чтобы все изображения / файлы загружались через администратора, чтобы эти сообщения переходили в конкретный каталог на моем сервере, но все остальное оставалось как обычно. Возможно ли это, используя wp_upload_dir?

Solutions Collecting From Web of "Укажите пользовательский путь загрузки только для настраиваемого типа сообщений?"

Вы можете добавить фильтр в upload_dir. Вот простой класс, который я написал для этого проекта. Используйте protected $filter_path переменную protected $filter_path для определения альтернативного каталога загрузок (* будет относиться к wp-content / uploads)

 class UGC_Attachment { protected $upload_dir; protected $upload_url; protected $filter_path = '/relative_path_from_wp-content/uploads'; function __construct() { $dir = wp_upload_dir(); $this->upload_dir = $dir['basedir'] . $this->filter_path; $this->upload_url = $dir['baseurl'] . $this->filter_path; } function upload_dir_filter( $upload ) { $target_path = $this->upload_dir; $target_url = $this->upload_url; wp_mkdir_p( $target_path ); $upload['path'] = $target_path; $upload['url'] = $target_url; return $upload; } } 

Применение:

 function prefix_upload_dir_filter( $post ) { if ( 'clients' != get_post_type( $post ) return; $filter = new UGC_Attachment(); return add_filter( 'upload_dir', array( &$filter, 'upload_dir_filter' ); } 

Функция prefix_upload_dir_filter должна быть прикреплена к действию или фильтру с доступным объектом $ post или значением $ post ID. Вам нужно будет сделать еще несколько исследований, чтобы понять эту часть, или, может быть, кто-то еще сможет прослушивать. Мое использование было полным пользовательским решением для загрузки изображений с лицевой стороны, где мне нужны публично разобранные изображения, размещенные во временном каталоге, который можно было бы очистить ночью через работу cron.

Что-то вроде этого может сделать трюк, просто измените mycpt, как вам нравится

 add_filter('upload_dir', 'mycpt_uploaddir'); function mycpt_uploaddir( $param ){ global $typenow; if ('mycpt' != $typenow) return $param; $mycpt = '/mycpt'; $param['path'] = $param['path'] . $mycpt; $param['url'] = $param['url'] . $mycpt; return $param; } 

Это работает довольно хорошо:

 add_filter( 'upload_dir', 'custom_prefix_upload_dir' ); function custom_prefix_upload_dir( $pathdata ) { global $current_user,$pagenow; if ( ( 'async-upload.php' == $pagenow || 'media-upload.php' == $pagenow ) && false !== strpos( wp_get_referer(),'post_type=clients' ) ) { $custom_dir = '/my_custom_uploads'; if ( empty( $pathdata[ 'subdir' ] ) ) { $pathdata[ 'path' ] = $pathdata[ 'path' ] . $custom_dir; $pathdata[ 'url' ] = $pathdata[ 'url' ] . $custom_dir; $pathdata[ 'subdir' ] = '/kanzu_intug'; } else { $new_subdir = $custom_dir . $pathdata[ 'subdir' ]; $pathdata[ 'path' ] = str_replace( $pathdata[ 'subdir' ], $new_subdir, $pathdata[ 'path' ] ); $pathdata[ 'url' ] = str_replace( $pathdata[ 'subdir' ], $new_subdir, $pathdata[ 'url' ] ); $pathdata[ 'subdir' ] = str_replace( $pathdata[ 'subdir' ], $new_subdir, $pathdata[ 'subdir' ] ); } } return $pathdata; }