На страницу 1, 2 След. |
|
|
Допустим есть категория Колеса, нужно получить все метки постов из этой категории. |
|
|
|
|
|
я правильно понял что у тебя есть категория, в ней несколько постов, у этих постов есть куча меток и именно эти метки тебе надо получить? Те которые у постов в данной категории.. |
|
|
|
|
|
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;
|
ЗЫ: код не тестировал |
|
|
|
|
|
В 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 раз |
|
|
|
|
текущую кату можно получить так:
Код: |
if (is_category() || is_single()) {
$cat_ID = get_query_var('cat');
}
|
|
|
|
|
|
|
Codd, в этом варианте будут браться тэги только последних 5 постов категории |
|
|
|
|
|
Цитата: |
Codd, в этом варианте будут браться тэги только последних 5 постов категории
|
Оффтоп: |
уже не могу отредактировать сообщение
|
Вместо
$posts = get_posts( array('category' => $cat_id) );
надо
$posts = get_posts( array('category' => $cat_id, 'numberposts' => -1) ); |
|
|
|
|
|
Codd, только вот при наличии большого кол-ва постов в категории ф-ция get_tags_in_cat сделает еще больше запросов в БД
там на каждый пост приходится по 2 или 3 запроса
хотя и найденный мною запрос далек от оптимальности
алгоритм как бы я сделал: получил одним запросом все ID постов в указанной категории, вторым запросом получил бы все тэги для найденных постов |
|
|
|
|
|
только проснулся, еще не тестировал, вобщем суть такая есть категории от 1000 до 10к постов, нужно разом вывести метки для кажой скопипастить на обычную страницу.
Всем спасибо буду пробовать, тока скажите какой код правильный |
|
|
|
|
|
DK, я выложенный код не пробовал
если будет время и дойдут руки, то на выходных попробую
код Codd-а должен работать, но вот как он поведет себя на 1К+ постов сказать сложно, зависит от хостинга
но запросов к БД делает много |
|
|
|
|
|
у кода заработал скрипт , спасибо, еще не тестировал на 10к но думаю на локлке должно справится |
|
|
|
|
|
а что надо подправить чтобы сортировка была по алфавиту? |
|
|
|
|
|
|
пасип, я просто не знал куда вставить |
|
|
|
|
|
хм, как только не пробовал неправильно соритует , Выводит например метку с первой буковой А метка на букву Б в середине
пробовал и так
$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') );
|
|
|
|
|
|