Наследование пользовательских типов записей (и структура URL)

После просмотра документации и поиска, я не смог ничего найти, поэтому здесь:

Есть ли какие-либо способ пользовательского пост-тип-наследования и структура URL вроде этого:

domain.com/%parenttype%/%parentname%/%posttype/%postname%/

Допустим, у артистов есть песни, они будут выглядеть так:

domain.com/artist/john-lennon/songs/imagine/

Я не видел, чтобы это было сделано в разработке раньше. Кто-нибудь знает что-нибудь об этом?

Ответы и комментарии:

Это был бы процесс, подобный использованию термина таксономии в постоянной ссылке, как в этом ответе. Дополнительный шаг, который вам понадобится, - это механизм выбора / сохранения идентификатора родительской записи в мета-записи поста ребенка.
Создан 08-10-2015 03:42 Milo

Это то, о чем я думал. Мне просто интересно, если кто-нибудь сделал это раньше.
Создан 08-10-2015 03:46 Frederik Spang

Вот так:

Зарегистрируйте два CPT (= пользовательские типы сообщений), например, исполнитель, песня
Отредактируйте слизь перезаписи вашего дочернего CPT на тип родительского /% parent-slug% / child-slug (Внимание: не используйте одно и то же слово для parent-slug; parent-slug должен совпадать с вашим родительским слагом CPT )
Добавьте мета-блок к вашему дочернему CPT, где вы можете определить родительский CPT
Измените постоянную ссылку CPT на ребенка в соответствии с вашими потребностями

Я завернул все это, готов к использованию:
class myArtistSongs {

    function init_post_types () {
        $ args = array (
            'menu_position' => 8,
            'tags' => array (
                'name' => __ ('Songs', 'myArtistSongs'),
                'all_items' => __ ('Все песни', 'myArtistSongs'),
                'singular_name' => __ ('Song', 'myArtistSongs')
            ),
            'menu_icon' => 'dashicons-format-audio',
            'public' => true,
            'publicly_queryable' => true,
            'query_var' => false,
            'ability_type '=>' post ',
            'has_archive' => false,
            'переписать' => массив (
                'slug' => 'artist /% artist% / songs',
                'feeds' => true,
                'pages' => true,
                'with_front' => true,
            ),
            'таксономии' => массив (
                «Художник»
            ),
            'Support' => массив (
                'заглавие',
                'редактор',
                «Миниатюра»,
                «Выдержка»
            )
        );
        register_post_type ('song', $ args);
        $ args = array (
            'menu_position' => 8,
            'tags' => array (
                'name' => __ ('Artists', 'myArtistSongs'),
                'all_items' => __ ('Все исполнители', 'myArtistSongs'),
                'singular_name' => __ ('Artist', 'myArtistSongs')
            ),
            'menu_icon' => 'dashicons-groups',
            'public' => true,
            'publicly_queryable' => true,
            'query_var' => false,
            'ability_type '=>' post ',
            'has_archive' => false,
            'переписать' => массив (
                'slug' => 'Artist',
                'feeds' => true,
                'pages' => true,
                'with_front' => true,
            ),
            'таксономии' => массив (
                «Художник»
            ),
            'Support' => массив (
                'заглавие',
                'редактор',
                «Миниатюра»,
                «Выдержка»
            )
        );
        register_post_type ('artist', $ args);
    }

    статическая функция song_permalink ($ permalink, $ post_id, $ leavename) {
        if (strpos ($ permalink, '% artist%') === FALSE) возвращает $ permalink;
        $ post = get_post ($ post_id);
        if (! $ post) возвращает $ permalink;
        $ artist = get_post_meta ($ post-> ID, '_artist', true);
        if ($ artist> 0) {
            $ artist = get_post ($ artist);
            if (! $ artist) $ artist = false;
            иначе $ artist = $ artist-> post_name;
        }
        if (! $ artist) $ artist = 'no-artist';
        return str_replace ('% artist%', $ artist, $ permalink);
    }

    function add_meta_box () {
        add_meta_box (
            "Статья-родитель,
            __ ( 'Исполнитель', ''),
            массив ('myArtistSongs', 'meta_box'),
            «Песня»,
            'боковая сторона',
            'низкий'
        );
    }

    function meta_box ($ post) {
        $ artist = get_post_meta ($ post-> ID, '_artist', true);
        глобальный $ wp_query, $ post;
        $ old_wp_query = $ wp_query;
        $ old_post = $ post;
        $ loop = new WP_Query (массив ('post_type' => 'artist', 'posts_per_page = -1'));
        echo "";
        $ no_value = __ ('(нет исполнителя)', 'myArtistSongs');
        echo "". $ no_value. " option>";
        if ($ loop-> have_posts ()) while ($ loop-> have_posts ()) {
            $ Петель> the_post ();
            $ o_id = get_the_ID ();
            $ o = get_the_title ();
            echo " {$ o} option > ";
        }
        echo " select>";
        $ post = $ old_post;
        $ wp_query = $ old_wp_query;
    }

    функция save ($ post_id) {
        если (определено ('DOING_AUTOSAVE') && DOING_AUTOSAVE)
            вернуть;
        if (! current_user_can ('edit_post', $ post_id))
            вернуть;
        if ($ _POST ['artist']) {
            update_post_meta ($ post_id, '_artist', $ _POST ['artist']);
        } еще {
            delete_post_meta ($ post_id, '_artist');
        }
    }
}

add_action ('init', array ('myArtistSongs', 'init_post_types'));
add_filter ('post_link', array ('myArtistSongs', 'song_permalink'), 10, 3);
add_filter ('post_type_link', array ('myArtistSongs', 'song_permalink'), 10, 3);
add_action ('add_meta_boxes', массив ('myArtistSongs', 'add_meta_box'));
add_action ('save_post', массив ('myArtistSongs', 'save'));
Создан 13-03-2016 12:40 iantsch706410

Почему вы считаете, что ваше устройство не поддерживает FAT32? Я спрашиваю, потому что FAT32 довольно старый и широко поддерживается на данный момент.
Создан 10-12-2018 05:44 Michael Kohne

Это покажет вам, как конвертировать NTFS в FAT32
Создан 10-12-2018 05:17 Michael Kohne

Большинство новых устройств Android (и даже некоторые старые) поддерживают NTFS, FAT (32/16), exFAT и vFAT. Вы можете проверить с помощью 'cat / proc / filesystems' или записей * _FS = из вашего исходного кода ядра. Я использовал жесткий диск Western Digital объемом 512 ГБ USB с NTFS на моем телефоне Android.
Создан 10-12-2018 10:11 Irfan Latif

Пожалуйста, измените, чтобы упомянуть устройство и версию Android
Создан 11-12-2018 06:57 beeshyams♦

Я думаю, что Android поддерживает NTFS. Теперь это часть AOSP. Проверьте источник Vold. Также / system / bin содержит fsck, mkfs и файлы монтирования для NTFS. Для ч / б доступа к NTFS используется устройство fuseblk, поскольку оно пока не поддерживается непосредственно ядром Linux.
Создан 10-12-2018 10:50 Irfan Latif

О времени ... Спасибо, я отредактирую ответ.
Создан 10-12-2018 10:28 Zillinium

Ваше устройство не распознает ваш жесткий диск, потому что ваш жесткий диск нуждается в электронном питании, чтобы работать не из-за формата вашего жесткого диска.
Единственный способ использовать жесткий диск в устройстве Android - это использовать жесткий диск с меньшей емкостью 512 ГБ или использовать жесткий диск с отдельным проводом питания и проводом данных.
Создан 10-12-2018 07:59 Ali91


Android в последнее время получил поддержку NTFS
ОК, для всех моих разделов жесткого диска работать, я использую ПК на Windows и бесплатная программа под названием Помощник стандартных разделов Шетти
Используя часть'Assist очень прямо вперед, и кучи больше контроля над обычным поддержку форматирования в Windows.
Вы можете конвертировать, клонировать, форматировать, перемещать, ремонт и изменение размера диски и разделы.
Как формат с помощью программного обеспечения.

Установить И Открыть Часть'Assist'
Место вашего жесткого диска в ваш компьютер USB-порт
Выберите HDD в части'Assist'
Выберите нужное действие

Переформатирование будет более быстрый вариант, однако он сотрет все.
Я лично использовать exFAT на моих жестких дисках, однако я считаю, что она должна поддерживать жир или ( для vfat-это что эмулятор терминала выбрасывает )
Андроид сила вашего жесткого диска, если он с автономным питанием, и не взять два USB-кабеля ( 5 Вольт + 5 вольт = 10В ) .. андроидам, которые поддерживают OTG ( на ходу ) обеспечить 5V питания для USB-порт, и этого вполне достаточно, чтобы выполнить очень большой 5вольт портативный жесткий диск ( 2 ТБ и т. д... )
Вам может понадобиться дополнительный источник питания, если устройство не справиться с OTG функции должным образом ( некоторые таблетки и старых устройств ) и требует адаптера питания на 5 вольт питания ( могут быть построены с помощью пайки провода заземления к микро-USB рукавом на разъеме питания 5 вольт на некоторых моделях ).
После форматирования, что и vfat ( fat ) вы должны быть в состоянии заставить его работать нормально.
Я просто хочу сказать, что я думаю, что это удивительно, как далеко этот хак пришел... в начале, Android не поддерживает USB-устройства через микро-USB, какой-то хакер решил дать ей идти лет назад и выяснили, что все это нужно было власти, чтобы запустить USB-накопитель, мышь или клавиатуру... или любое устройство с драйвером, который может быть построен....
После взлома стал частью многих пользовательских ПЗУ, как ЦИАН мод ( см ), Производитель и кто-то в штабе Андроид заметил !! вскоре стало известно, как OTG ( на ходу ) - этот хак теперь имеет аппаратную поддержку питания 5вольт питание потому что кто-то посмотрел на микро-кабель USB диаграмм и сказал Эй, давайте просто землю снаряд на USB и у нас будет 5vlt питания от батареи ... гений...
Создан 10-12-2018 10:36