Поддержка Проблемы и решения Как получить название произвольного типа записи?

  • Решено DirtyDan

    (@dirtydan)


    С помощью какого кода можно получить «техническое» название произвольного типа записи?

    // в functions.php регистрируется произвольный тип записи под названием accessories:
    'taxonomies' => array('accessories')

    Само слово accessories и нужно получить в переменную в шаблоне. Как это сделать?

    Пробовал этот код, но не работает:

    $peremennaya = get_query_var('taxonomy');
    echo $peremennaya;
Просмотр 15 ответов — с 1 по 15 (всего 32)
  • совершенно неправильно.
    произвольный тип записи у вас другой — а accessories это таксономия для этого произвольного типа записи и регистрируется она отдельно.

    и вообще, я не понимаю для чего вам все это.
    вы сами регистрируете произвольные типы записей и таксономии, то есть вы знаете их названия. зачем вам код, выводящий эти названия? на случай внезапной амнезии?

    
    <?php 
       $tax = $wp_query->get_queried_object();
       echo ''. $tax->name . '';
       echo "<br>";
       echo ''. $tax->description .''; 
    ?>
    

    Flector Спасибо, проверил, но данный код выводит не ту информацию и не работает на сингл страницах. В страницах таксономий и на главной странице таксономии он разную информацию выводит. Мне нужно чтобы на сингл и в архивах выводилось только так сказать «техническое» название произвольного типа постов в переменную. Это название одно единственное и для архивов и для сингл страниц.

    Это нужно чтобы разделить всю информацию сайта на части, на города. Полностью.
    Например, чтобы посетители из Москвы видели последние комментарии, материалы, категории, теги только для своего города. И соответственно посетителям из других городов выдавались данные только для своего города. То есть один единственный код можно вставить в шаблоны разных произвольных типов постов и везде выводилась бы своя информация. Если материал принадлежит Москве, то посетитель на сингл странице может увидеть, например, последние комментарии, оставленные для других постов Москвы.

    Слово accessories в functions.php встречается лишь дважды, вот второй раз:
    register_taxonomy('accessories', array('moscow'), array(
    И вот это как раз регистрация таксономий (по типу категорий), а код в первом моем сообщении это регистрация произвольного типа постов. Я так понимаю. accessories — его нужно вывести.

    В общем, вопрос остается открытым.

    • Ответ изменён 6 лет, 1 месяц назад пользователем DirtyDan.
    Модератор Yuri

    (@yube)

    DirtyDan, мне кажется, что Вам надо на время отложить код в сторону и мысленно (или на бумажке, если так удобней) разложить по полочкам записи, типы, таксономии, термы и прочие сущности. Ибо в том, что Вы пишете, имеет место некоторая путаница.

    И вот это как раз регистрация таксономий (по типу категорий), а код в первом моем сообщении это регистрация произвольного типа постов. Я так понимаю. accessories — его нужно вывести.

    ну если у вас одна единственная таксономия, прикрепленная к записям, то на фига вам код, выводящий ее название? ну я могу еще понять, если вам надо название термина этой таксономии — но сама таксономия то зачем? она у вас везде одинаковая — accessories и смысла получать ее кодом нет совершенно, вы ее вручную можете прописать где угодно.

    но сама таксономия то зачем? она у вас везде одинаковая

    Таксономий много. Городов много. Каждый город — это свой произвольный тип записи. Тот код из functions.php — таких кодов регистраций в этом файле много, а не один. Соответственно произвольных типов записи много. У каждого города свои таксономии (по типу меток и категорий). Сайт полностью разбит по разным городам.
    Нужно чтобы один код мог быть для множества, например, сингл шаблонов, шаблонов с архивами. Но этот код подгружается через <?php get_template_part( 'code' ); ?>

    Вывожу весь код. Обратите внимание на последние строки. Там есть слово accessories. Его само и нужно вывести в переменную.

    add_action('init', 'moscow');
    function moscow()
    {
      $labels = array(
        'name' => 'Москва',
        'singular_name' => 'Москва',
        'add_new' => 'Добавить запись Москва',
        'add_new_item' => 'Добавить запись Москва',
        'edit_item' => 'Редактировать запись Москва',
        'new_item' => 'Новая запись Москва',
        'view_item' => 'Посмотреть запись Москва',
        'search_items' => 'Найти запись Москва',
        'not_found' =>  'Записей Москва не найдено',
        'not_found_in_trash' => 'В корзине записей Москва не найдено',
        'parent_item_colon' => '',
        'menu_name' => 'Москва'
      );
    
      $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'query_var' => true,
        'rewrite' => true,
        'capability_type' => 'post',
        'has_archive' => true,
        'hierarchical' => false,
        'menu_position' => 5,
        'supports' => array('title','editor', 'comments','custom-fields'),
    	'taxonomies' => array('accessories')
      );
      register_post_type('moscow',$args);  
    }

    вы неправильно построили структуру сайта. да и в терминологии запутались.

    зачем вам произвольный тип записи под каждый город — мне совершенно непонятно. там должен быть один тип, а города должны быть терминами таксономии.

    а то, что вы сейчас натворили — мне лично непонятно. accessories это таксономия. она у ваших типов записи moscow всегда одна и та же — accessories. зачем вам ее кодом получать, если вы ее и так знаете?

    там должен быть один тип, а города должны быть терминами таксономии.

    Если так будет, то получится следующее: если посетитель видит Московский материал (интересен только жителям Москвы), то рядом в блоке с последними оставленными комментариями будут выводиться комментарии и к материалам для остальных городов. Но зачем Москвичу видеть комментарии для Санкт-Петербурга и остальных городов? Зачем Москвичу видеть в блоке последних добавленных материалов материалы для Новосибирска? Московский материал должны окружать только ссылки для Московских материалов. Для Екатеринбургских — ссылки на Екатеринбургские, и т.п.

    она у ваших типов записи moscow всегда одна и та же — accessories. зачем вам ее кодом получать

    Верно. Вот только типов записи не один, а много. Нужно ее получать чтобы один единственный код мог работать в одном отдельном вынесенном подгружаемом файле для всех существующих типов записей.

    <?php
    сначала получить в переменную текущий тип записи
    wp_list_categories('taxonomy=ВЫВЕСТИ ЕГО ТУТ ИЛИ В ARRAY); ?>

    Таким образом категории для каждого типа записи везде будут свои.

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

    открою вам секрет — переписать блок или виджет вывода последних комментариев на основе записей определенного термина таксономий будет в 1000 раз проще и эффективнее, чем плодить тысячи произвольных типов записей.

    Верно. Вот только типов записи не один, а много. Нужно ее получать чтобы один единственный код мог работать в одном отдельном вынесенном подгружаемом файле для всех существующих типов записей.

    для меня это звучит совершенно бессмысленно и непонятно.

    открою вам секрет — переписать блок или виджет вывода последних комментариев на основе записей определенного термина таксономий будет в 1000 раз проще и эффективнее, чем плодить тысячи произвольных типов записей.
    В моем случае кажется это не подойдет. Что вы имеете ввиду подробнее?

    почему не подойдет то?

    структура простейшая — запись произвольного типа с таксономией, скажем, city — пишем запись, присваиваем термин «Москва» — выводим где хотим только записи с этим термином «Москва». в чем проблема то?

    Это вряд ли позволит разделить полностью всю информацию на сайте по городам. У каждого материала уже имеются одна таксономия по типу категорий и одна таксономия по типу меток. Они уже объединены дополнительно.

    К тому же если сделать города таксономиями (по типу категорий), как вы предлагали, то получатся дубли в url в разных городах если будут, вдруг, одинаковые наименования в тайтлах в разных городах, а они будут.
    /privet-mir.html
    /privet-mir-2.html
    /privet-mir-3.html

    Мне не нужны дубли с числами из разных городов так как контента планируется опубликовать на десятки и сотни тысяч страниц и несмотря на одинаковый тайтл материалы там разные, и так и должно быть в норме. К тайтлу лишь в теге <title> будет дописываться название города. Просто потом при дальнейших добавлениях необходимо будет обрабатывать массово контент через плагины на поиски возможных дублей и не нужно чтобы ошибочно показывались дубли с числами в url из разных городов, так как они не будут являться дублями, а дублями будут только те материалы, которые имеют цифры и опубликованы для одного города.

    это как создавать произвольный тип записи «Фильм» (movie) с таксономией-жанрами (genre), но вместо правильного создания клепать произвольный тип записи под каждый жанр.

    дубли в слагах, вы серьезно?
    у вас что одинаковые названия записей будут?
    типа «в москве обещают снегопад» — и эта новость уйдет в питер?

    да даже если слаги будут одинаковыми или через добавление цифр — а вам не все равно? кому на фиг сейчас интересен урл? яндекс браузер вон вообще перестал его выводить.

    но в любом случае вы не объяснили главное — что означает таксономия accessories? что в ней будет то? какие термины?

    Новостей не будет. Будут кое-какие другие данные. Сайт очень специфичный и именно такая его структура того стоит. Может мне сложно объяснить без информации о чем этот сайт, но это стоит того.

    кому на фиг сейчас интересен урл?
    Дело совсем не в url, а в том, что мне нужно будет плагином массово удалить/обновить старые данные при последующих заливках материалов. Если я сделаю так как вы сказали, то ошибочно обновятся/удалятся данные, которые не надо обновлять/удалять. Из-за специфики материалов невозможно им присвоить свой ID. Остается разделять по городам. И на удобстве для посетителей это скажется, конечно, в первую очередь.

    но в любом случае вы не объяснили главное — что означает таксономия accessories? что в ней будет то? какие термины?

    Нет никаких акессуаров))) это глобальное название одного произвольного типа данных — одного города, и всё. У других городов свои названия — taxmoskva, taxnovosibirsk, и т.п. Просто изначально когда создавал сайт с нуля взял тестовый код с этим названием.

    accessories — это не таксономия, а название произвольного типа записей. Нарпимер, все записи для Москвы имеют это название. Все записи для Спб имеют название — taxspb, Для новосибирска — taxnovosibirsk. И так далее.

    вы ерунду говорите.
    у всех записей в движке есть ID, используете вы его в урл или нет — он все равно есть. и мне совершенно непонятно, с какого перепуга у вас урлы «privet-mir.html» и «privet-mir-2.html» являются одинаковыми — там потому и есть цифра 2, что одинакового слага быть не может. и если вы собираетесь обновлять данные по слагу записи — то никаких препятствий этому нет.

    что у вас будет сайт и какие на нем будут материалы вы сказать не хотите. хм, ваше право — но при ваших скудных знаниях движка вам будет чрезвычайно сложно объяснить кому-нибудь, что вы хотите получить.

Просмотр 15 ответов — с 1 по 15 (всего 32)
  • Тема «Как получить название произвольного типа записи?» закрыта для новых ответов.