АРМАДА
Как вызвать метки из определенной категории wordpress
На страницу 1, 2  След.
Новая тема Написать ответ Advanced Hosters - профессиональный хостинг

DK +
wordpress
Зарегистрирован: 18.06.2008
Сообщений: 2425
Обратиться по нику
# Добавлено:Пт Июн 17, 2011 3:31 amДобавить в избранноеОтветить с цитатой
Допустим есть категория Колеса, нужно получить все метки постов из этой категории.

m_Stasuk
Дизайнер
Зарегистрирован: 23.12.2007
Сообщений: 5967
Contest (Сумма: 2)
Обратиться по нику
# Добавлено:Пт Июн 17, 2011 5:36 amОтветить с цитатой
я правильно понял что у тебя есть категория, в ней несколько постов, у этих постов есть куча меток и именно эти метки тебе надо получить? Те которые у постов в данной категории..
Зарабатываю на рускамзе
Ростов-на-Дону

ctapbiu
Опытный
Зарегистрирован: 06.01.2008
Сообщений: 328
Обратиться по нику
# Добавлено:Пт Июн 17, 2011 9:46 amОтветить с цитатой
http://wordpress.org/support/topic/get-tags-specific-to-category

есть там такое решение:
Код:

function get_category_tags($args) {
   global $wpdb;
   $tags = $wpdb->get_results
   ("
      SELECT DISTINCT terms2.term_id as tag_id, terms2.name as tag_name, null as tag_link
      FROM
         wp_posts as p1
         LEFT JOIN wp_term_relationships as r1 ON p1.ID = r1.object_ID
         LEFT JOIN wp_term_taxonomy as t1 ON r1.term_taxonomy_id = t1.term_taxonomy_id
         LEFT JOIN wp_terms as terms1 ON t1.term_id = terms1.term_id,

         wp_posts as p2
         LEFT JOIN wp_term_relationships as r2 ON p2.ID = r2.object_ID
         LEFT JOIN wp_term_taxonomy as t2 ON r2.term_taxonomy_id = t2.term_taxonomy_id
         LEFT JOIN wp_terms as terms2 ON t2.term_id = terms2.term_id
      WHERE
         t1.taxonomy = 'category' AND p1.post_status = 'publish' AND terms1.term_id IN (".$args['categories'].") AND
         t2.taxonomy = 'post_tag' AND p2.post_status = 'publish'
         AND p1.ID = p2.ID
      ORDER by tag_name
   ");
   $count = 0;
   foreach ($tags as $tag) {
      $tags[$count]->tag_link = get_tag_link($tag->tag_id);
      $count++;
   }
   return $tags;
}



в шаблоне использовать так:
Код:

$args = array(
   'categories'            => '12,13,14'
);
$tags = get_category_tags($args);

$content .= "<ul>";
foreach ($tags as $tag) {
   $content .= "<li><a href=\"$tag->tag_link\">$tag->tag_name</a></li>";
}
$content .= "</ul>";
echo $content;



ЗЫ: код не тестировал

Codd
Опытный
Зарегистрирован: 13.01.2011
Сообщений: 186
Обратиться по нику
# Добавлено:Пт Июн 17, 2011 9:47 amОтветить с цитатой
В functions.php шаблона
Код:
function get_tags_in_cat($cat_id)
{
    $posts = get_posts( array('category' => $cat_id) );
    $tags = array();
   
    foreach($posts as $post)
    {
        $post_tags = get_the_tags($post->ID);

        if( !empty($post_tags) )
            foreach($post_tags as $tag)
                $tags[$tag->term_id] = $tag;
       
    }

    return $tags;
}



Получение и вывод тегов
Код:

    $tags = get_tags_in_cat(1);

    foreach($tags as $tag)
        $tags_print[] = '<a href="' .get_tag_link($tag->term_id). '">' .$tag->name. '</a>';

    echo implode(',', $tags_print);


Где 1 - ID категории


Последний раз редактировалось: Codd (Пт Июн 17, 2011 10:00 am), всего редактировалось 1 раз

ctapbiu
Опытный
Зарегистрирован: 06.01.2008
Сообщений: 328
Обратиться по нику
# Добавлено:Пт Июн 17, 2011 9:50 amОтветить с цитатой
текущую кату можно получить так:
Код:

if (is_category() || is_single()) {
   $cat_ID = get_query_var('cat');
}


ctapbiu
Опытный
Зарегистрирован: 06.01.2008
Сообщений: 328
Обратиться по нику
# Добавлено:Пт Июн 17, 2011 10:15 amОтветить с цитатой
Codd, в этом варианте будут браться тэги только последних 5 постов категории

Codd
Опытный
Зарегистрирован: 13.01.2011
Сообщений: 186
Обратиться по нику
# Добавлено:Пт Июн 17, 2011 11:17 amОтветить с цитатой
Цитата:
Codd, в этом варианте будут браться тэги только последних 5 постов категории


[offtop]уже не могу отредактировать сообщение[/offtop]
Вместо
$posts = get_posts( array('category' => $cat_id) );
надо
$posts = get_posts( array('category' => $cat_id, 'numberposts' => -1) );

ctapbiu
Опытный
Зарегистрирован: 06.01.2008
Сообщений: 328
Обратиться по нику
# Добавлено:Пт Июн 17, 2011 1:31 pmОтветить с цитатой
Codd, только вот при наличии большого кол-ва постов в категории ф-ция get_tags_in_cat сделает еще больше запросов в БД
там на каждый пост приходится по 2 или 3 запроса
хотя и найденный мною запрос далек от оптимальности

алгоритм как бы я сделал: получил одним запросом все ID постов в указанной категории, вторым запросом получил бы все тэги для найденных постов

DK +
wordpress
Зарегистрирован: 18.06.2008
Сообщений: 2425
Обратиться по нику
# Добавлено:Пт Июн 17, 2011 2:04 pmОтветить с цитатой
только проснулся, еще не тестировал, вобщем суть такая есть категории от 1000 до 10к постов, нужно разом вывести метки для кажой скопипастить на обычную страницу.

Всем спасибо буду пробовать, тока скажите какой код правильныйSmile

ctapbiu
Опытный
Зарегистрирован: 06.01.2008
Сообщений: 328
Обратиться по нику
# Добавлено:Пт Июн 17, 2011 2:27 pmОтветить с цитатой
DK, я выложенный код не пробовал
если будет время и дойдут руки, то на выходных попробую
код Codd-а должен работать, но вот как он поведет себя на 1К+ постов сказать сложно, зависит от хостинга
но запросов к БД делает много

DK +
wordpress
Зарегистрирован: 18.06.2008
Сообщений: 2425
Обратиться по нику
# Добавлено:Пт Июн 17, 2011 5:20 pmОтветить с цитатой
у кода заработал скрипт Smile, спасибо, еще не тестировал на 10к но думаю на локлке должно справится

DK +
wordpress
Зарегистрирован: 18.06.2008
Сообщений: 2425
Обратиться по нику
# Добавлено:Пт Июл 08, 2011 12:37 pmОтветить с цитатой
а что надо подправить чтобы сортировка была по алфавиту?

ctapbiu
Опытный
Зарегистрирован: 06.01.2008
Сообщений: 328
Обратиться по нику
# Добавлено:Пт Июл 08, 2011 12:52 pmОтветить с цитатой
Код:

$posts = get_posts( array('category' => $cat_id, 'numberposts' => -1, 'orderby'=>'title') );



параметры сортировки: http://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters

DK +
wordpress
Зарегистрирован: 18.06.2008
Сообщений: 2425
Обратиться по нику
# Добавлено:Сб Июл 09, 2011 12:15 pmОтветить с цитатой
пасип, я просто не знал куда вставитьSmile

DK +
wordpress
Зарегистрирован: 18.06.2008
Сообщений: 2425
Обратиться по нику
# Добавлено:Вс Июл 10, 2011 2:47 pmОтветить с цитатой
хм, как только не пробовал неправильно соритует Smile , Выводит например метку с первой буковой А метка на букву Б в середине

пробовал и так

$query = new WP_Query( array ( 'orderby' => 'title', 'order' => 'DESC' ) );
и
$query = new WP_Query( array ( 'orderby' => 'title', 'order' => 'ASC' ) );
и
$posts = get_posts( array('category' => $cat_id, 'numberposts' => -1, 'orderby'=>'title') );
и
$posts = get_posts( array('category' => $cat_id, 'numberposts' => -1, 'orderby'=>'name') );
:smk:
Новая тема Написать ответ    ГЛАВНАЯ ~ ТЕХНИЧЕСКИЕ ВОПРОСЫ

Перейти:  





Генеральный спонсор



Партнеры