Получение таксономии текущей страницы в WordPress

5 янв. 2011 г., 21:12:04
Просмотры: 17.3K
Голосов: 2

У меня есть несколько страниц с пользовательской таксономией для каждой страницы, и я пытаюсь получить эту таксономию на странице. Мне нужно что-то вроде the_current_taxonomy() аналогичное функции the_title(). Это должно работать вне цикла, так как я буду использовать это в пользовательском WP_Query сразу после.

Редактирование: Нашел решение, используя другой способ получения нужной информации. Спасибо за помощь, ребята.

0
Все ответы на вопрос 4
2

Как и Rarst, я не совсем понимаю, что именно вы хотите вывести — таксономию или термины этой таксономии.

Таксономию можно вывести, например, создав файл шаблона с именем этой таксономии: taxonomy-name.php

Заголовок таксономии тогда будет выглядеть так:

<h1 class="page-title"><<?php $term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); echo $term->name; ?></h1>

Термины внутри таксономии можно вывести с помощью облака тегов, см. http://codex.wordpress.org/Function_Reference/wp_tag_cloud (но это уже внутри цикла)

6 янв. 2011 г. 08:43:32
Комментарии

Цель — вывести термин из таксономии, назначенной текущей странице. Я попытался вывести термины внутри моей таксономии с помощью wp_tag_cloud(), и это сработало — я вижу нужный мне термин в середине. Затем я попробовал использовать функцию get_term_by(), которую вы мне дали, но без успеха.

kevin kevin
6 янв. 2011 г. 17:36:18

Я также попытался изменить второй параметр на $post->ID, как показано в примере на странице кодекса http://codex.wordpress.org/Function_Reference/get_term_by#Examples, но тоже безрезультатно.

kevin kevin
6 янв. 2011 г. 17:41:37
10

Я предполагаю, что taxonomy остается тем же, и вам нужны terms (термины) в этой таксономии, назначенные записи?

Базовой функцией для этого является wp_get_object_terms(). Она требует ID объекта, поэтому если вы сбрасываете данные записи, вам нужно будет сохранить его заранее или извлечь из оригинального запроса (насколько я помню, это $wp_query->get_queried_object_id()).

5 янв. 2011 г. 23:01:49
Комментарии

Да, как я писал в комментарии выше, мне нужно извлечь термин из таксономии, назначенной странице, чтобы затем использовать его как параметр в моем новом WP_Query(). Проблема функции wp_get_object_terms() в том, что она требует таксономию в качестве параметра.

kevin kevin
6 янв. 2011 г. 17:39:06

@kevin Я предполагаю, если это ваша собственная пользовательская таксономия, вы знаете, что использовать в качестве параметра? Или вам нужны все термины во всех таксономиях, назначенных записи? Пожалуйста, уточните.

Rarst Rarst
6 янв. 2011 г. 17:49:06

Да, это моя собственная, но я объяснил себя довольно плохо, я хотел найти термин, относящийся к определенной таксономии, которую я знаю, и который также связан со страницей. Извините за неясность.

kevin kevin
7 янв. 2011 г. 15:36:37

@kevin Я всё ещё не понимаю... Пожалуйста, обнови свой вопрос, добавив конкретный пример того, что у тебя есть и что именно ты хочешь получить.

Rarst Rarst
7 янв. 2011 г. 17:29:34

@Rarst, проблема решена, я отредактировал свой первый пост.

kevin kevin
7 янв. 2011 г. 19:01:07

@kevin Если ты не против - не мог бы ты добавить решение, к которому ты пришёл, в качестве ответа, чтобы другие могли воспользоваться им в будущем.

Rarst Rarst
7 янв. 2011 г. 19:02:47

@Rarst, сделано; Редакция2.

kevin kevin
7 янв. 2011 г. 21:17:32

@kevin, пожалуйста, в виде ответа :) Так работает система — вопрос и детали отдельно, конкурирующие ответы отдельно, даже если вы отвечаете на свой собственный вопрос. Так меньше путаницы, если кто-то предложит улучшенную версию кода и тому подобное.

Rarst Rarst
7 янв. 2011 г. 21:22:48

Конечно, извините, не знал. Редакция: придётся подождать 3 минуты.

kevin kevin
7 янв. 2011 г. 21:26:56

@Rarst, всё готово.

kevin kevin
7 янв. 2011 г. 21:35:06
Показать остальные 5 комментариев
0

Итак, мне нужно было извлечь термин из известной таксономии, связанной со страницей (например, так:

function register_prod_categoria() {
  register_taxonomy(
     'prod-categoria',
     array( 'produtos', 'page' ),

(produtos — это пользовательский тип записи, просто для справки.)).

Я пробовал разные варианты, среди них этот: get_terms('prod-categoria',''). Он работает, но возвращает мне всю информацию о таксономии prod-categoria, а это не то, что мне нужно.

Затем, как указано в кодексе, для функции get_terms() доступны два (интересных для меня) параметра: child_of и parent. Это звучало идеально, поэтому я попробовал: get_terms('prod-categoria','child_of=marca');, а также get_terms('prod-categoria','parent=marca'), где marca — это родительский термин (из пользовательской таксономии prod-categoria), из которого я хотел извлечь дочерние термины. Оба варианта не дали результатов. Я также пробовал с названием Marca и слагом marca, но безрезультатно.

В итоге я остановился на таком решении: $tt = the_title('','',false);. Я получаю заголовок страницы, чтобы использовать его в качестве параметра далее: $posts = posts_search ('produtos',array('prod-categoria'=>$tt,'prod-cols'=>'5-C-P-F-NF-P')); if($posts) { echo "<table class=\"table-marca\">"; foreach($posts as $post) { ... }

Кстати, функция posts_search() (я нашел её на http://wordpress.stackexchange.com или http://stackoverflow.com, если не ошибаюсь, точно не помню) позволяет выполнять запросы по нескольким таксономиям.

Я полностью согласен, что это далеко от идеала — зависимость от совпадения заголовка страницы с именем таксономии, но в моем случае это работает. Большое спасибо Rarst и Piet за попытки помочь.

7 янв. 2011 г. 21:33:45
0

Если вы уже находитесь на странице категории/термина, вы можете вызвать get_queried_object(); перед выполнением своего пользовательского запроса, чтобы получить информацию о категории/термине, включая slug.

5 мая 2012 г. 01:23:31