С помощью чудесмного плагина Toolset Types создаем свой кастомны тип постов и дальше для него создаем кастомную таксономию (типа категорию). В моем случае тип поста был gallery, а таксономию категории была gallery-cat.
Далее была найдена чудесная функция Post type specific upload folder - немного ее доработав наши файлы начали загружаться еще и в подпапки соответствующей категории ) Привожу финальный вариант:
add_filter('upload_dir', 'cgg_upload_dir');
function cgg_upload_dir($dir)
{
// xxx Lots of $_REQUEST usage in here, not a great idea.
// Are we where we want to be?
if (!isset($_REQUEST['action']) || 'upload-attachment' !== $_REQUEST['action']) {
return $dir;
}
// make sure we have a post ID
if (!isset($_REQUEST['post_id'])) {
return $dir;
}
// modify the path and url.
$type = get_post_type($_REQUEST['post_id']);
$cats = get_the_terms($_REQUEST['post_id'], 'gallery-cat', array("fields" => "all"));
foreach($cats as $cats_sl) {
$gal_subdir = $cats_sl->slug;
}
if(!empty($gal_subdir)) {
$uploads = apply_filters("{$type}_upload_directory", $type."/".$gal_subdir);
} else {
$uploads = apply_filters("{$type}_upload_directory", $type);
}
$dir['path'] = path_join($dir['basedir'], $uploads);
$dir['url'] = path_join($dir['baseurl'], $uploads);
return $dir;
}
кстати, для оформления кастомных постов очень помог плагин Custom Post Type Permalinks - с его помощью для кастомного поста gallery указал свой урл с учетом категорий:
/%gallery-cat%/%post_id%-%postname%.html
ну и не забыаем про обязательный плагин перевода кирилицы в латиницу (для ссылок) Cyr to Lat enhanced
Custom Upload Directories for Post Types
// Custom Upload Directories for Post Types
add_filter( 'upload_dir', 'custom_upload_directory' );
function custom_upload_directory( $args ) {
$id = $_REQUEST['post_id'];
$parent = get_post( $id )->post_parent;
$slug = get_post( $id )->post_name;
// Check the post-type of the current post
// assign directory to upload to
// assign URL to connect to
if( "gallery" == get_post_type( $id ) || "gallery" == get_post_type( $parent ) ) {
$cats = get_the_terms($_REQUEST['post_id'], 'gallery-cat', array("fields" => "all"));
foreach($cats as $cats_sl) {
$slug = $cats_sl->slug;
}
$args['path'] = WP_CONTENT_DIR . '/uploads/gallery/' . $slug . '';
$args['url'] = WP_CONTENT_URL . '/uploads/gallery/' . $slug . '';
}
if( "photograph" == get_post_type( $id ) || "photograph" == get_post_type( $parent ) ) {
$args['path'] = WP_CONTENT_DIR . '/uploads/photograph/' . $slug . '';
$args['url'] = WP_CONTENT_URL . '/uploads/photograph/' . $slug . '';
}
if( "other-artwork" == get_post_type( $id ) || "other-artwork" == get_post_type( $parent ) ) {
$args['path'] = WP_CONTENT_DIR . '/uploads/other-artwork/' . $slug . '';
$args['url'] = WP_CONTENT_URL . '/uploads/other-artwork/' . $slug . '';
}
return $args;
}
у меня он сработал лучше. после него я добавил плагин Set All First Images As Featured и в нем подправил функционал, что если нет картинок в самом посте, то пробовать искать еще в кастомном поле. правилось вот тут: wp-content\plugins\set-all-first-images-as-featured\includes\class-core.php
ищем кусок кода
$result = new stdClass(); $pattern = '@<img.+src="(?P<SRC>.*)".*>@Uims'; $str = $item->post_content; preg_match($pattern, $str, $matches);
и ниже дописываем
if( empty($matches) ) {
$matches['SRC'] = get_post_meta($item->ID, 'wpcf-gallery-photo', true);
}
понятное дело, что URK на полное фото у меня находится в кастомном поле wpcf-gallery-photo

