Поддержка Проблемы и решения изменение метки новой тах при добавлении в массивтипо

  • Решено ☭Gu

    (@gusoft)


    вот тут http://wp-kama.ru/function/register_taxonomy есть пример (в абзаце Шаблон использования), как добавить свою Тахо к типу записей Post:

    register_taxonomy('taxonomy', array('post'), $args );

    вопрос:

    допустим требуется добавление таких параметров к многим типам

    register_taxonomy('taxonomy', array('post',...,'myPostTypeN'), $args );

    это работает, но для всех добавляются Тахо с одинаковыми именами. в админке это смотрится нормально, но вот потом (например при добавлении пунктов меню) возникают проблемы «чей туфля» 🙂

    нужно чтобы в

    ...labels = array('name'=> 'Genres',...

    name при каждом добавлении, была бы ‘Genres ‘+<имя типа>

    Например

    ‘Genres Записи’
    ..
    ‘Genres myPostTypeN->name’

    можно ли в register_taxonomy запихать это както?
    вторым решением приходит заранее описать массив типов, и в цикле добавлять вытаскивая их имена. но я не настолько продвинут пока в php. а делать отдельный кусок добавления(привязки Тахо к типам) для всех >20 типов не хочется. можете помочь кодом или ссылку кинуть где примерно про это?

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    вторым решением приходит заранее описать массив типов, и в цикле добавлять вытаскивая их имена

    Это самый простой вариант, можно объединить его с фрагментом из соседней темы:

    $args = array(
    	// аргументы таксономии
    );
    
    $taxonomy_labels = array(
    	'post' => 'Post Genres',
    	'page' => 'Page Genres',
    );
    
    foreach ( $taxonomy_labels as $post_type => $taxonomy_label ) {
    	$args['labels'] = array_merge( $args['labels'], array( 'name' => $taxonomy_label ) )
    	register_taxonomy( 'taxonomy', $post_type, $args );
    );

    буду Вам только по пнд. писать вопросы 🙂
    я долго ждал именно от Вас решения и не стал в топ поднимать старую тему.

    ++ не так

    вот тут ‘name’ => $taxonomy_label
    мы же еще не знаем, кому это присвоить. т.е. присваиваем те, что есть все время.

    вот если там бы
    ‘name’ => $taxonomy_label . my_array_name[_какойто_номер_от_fsearch]

    сейчас так, как в связаной теме

    $args['labels'] = array_merge( $args['labels'], array( 'name' => gu_wp_cat1 .'Общее' ) );
            register_taxonomy('gu_main_cat', array('gu_main_post'), $args ); 
    
    ...
    тут много аналог.
    ....
    	$args['labels'] = array_merge( $args['labels'], array( 'name' => gu_wp_cat1 .'Аудио' ) );
    	register_taxonomy('gu_audio_cat', array('gu_audio_post'), $args );

    т.е. значения к имени должны добавляться ранее.

    спасибо. переделаю на правильность.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    мы же еще не знаем, кому это присвоить. т.е. присваиваем те, что есть все время.

    Не совсем понял, в чём проблема. Цикл foreach() перебирает указанные в массиве типы записей и ставит им соответствие указанные имена таксономий.

    В вашем примере массив будет таким:

    $taxonomy_labels = array(
    	'gu_main_post'  => gu_wp_cat1 . 'Общее',
    	'gu_audio_post' => gu_wp_cat1 . 'Аудио',
    	// ...
    );

    Можно и не хранить ярлыки в отдельном массиве, а получать их напрямую из типа записей с помощью функции get_post_type_object():

    $post_types = array( 'gu_main_post', 'gu_audio_post', ... );
    
    foreach ( $post_types as $post_type ) {
    	$args['labels'] = array_merge( $args['labels'], array(
    		'name' => gu_wp_cat1 . get_post_type_object( $post_type )->labels->name;
    	) )
    	register_taxonomy( 'taxonomy', $post_type, $args );
    );

    Автор ☭Gu

    (@gusoft)

    благодарю. вечерком попробую и обязательно отпишу

    Автор ☭Gu

    (@gusoft)

    дошло. работает. вопрос закрыт, спасибо.
    поправил на это

    foreach ( $post_types as $post_type ) {
    	$args['labels'] = array_merge( $args['labels'], array(	'name' => gu_wp_cat1 . get_post_type_object( $post_type )->labels->name ) );
    	register_taxonomy( str_replace('post','',$post_type) . 'cat', $post_type, $args ); }
    Автор ☭Gu

    (@gusoft)

    работает только при изменении имени таксо при добавлении, т.е. вариант с

    register_taxonomy( 'taxonomy', $post_type, $args ); в цикле foreach ( $post_types as $post_type ) не работает

    связано

    https://ru.forums.wordpress.org/topic/%d0%9f%d0%be%d0%bc%d0%be%d0%b3%d0%b8%d1%82%d0%b5-%d1%81-%d0%ba%d0%be%d0%b4%d0%be%d0%bc-%d0%bf%d0%bb%d0%b7?replies=6

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Тема «изменение метки новой тах при добавлении в массивтипо» закрыта для новых ответов.