2009-06-18 2 views
0

Использование Wordpress, мне нужно создать массив тегов (терминов) из сообщений в определенной категории.Wordpress: генерировать массив тегов из сообщений в отдельной категории

Например, если у меня есть две категории: «яблоко» и «оранжевый», мне нужен массив терминов, которые используются только в сообщениях категории Apple - не в оранжевой категории. (хотя, если термин используется в как, который должен быть включен)

Я попытался использовать несколько функций wordpress, но никто не возвращает то, что я хочу (включая функцию tag_cloud). Я предполагаю, что у меня остался запрос на запрос ... но пока все мои запросы не дают мне список, который я хочу.

Заранее за вашу помощь.

ответ

1

Я не уверен, что вы можете выполнить то, что хотите, используя функции WordPress. Вот SQL-запрос, который, кажется, что вы хотите:

SELECT tag_terms.name, COUNT(wp_posts.ID) FROM wp_posts 

INNER JOIN wp_term_relationships AS cat_term_relationships ON wp_posts.ID= cat_term_relationships.object_ID 
INNER JOIN wp_term_taxonomy AS cat_term_taxonomy ON cat_term_relationships.term_taxonomy_id= cat_term_taxonomy.term_taxonomy_id 
INNER JOIN wp_terms AS cat_terms ON cat_term_taxonomy.term_id= cat_terms.term_id 

INNER JOIN wp_term_relationships AS tag_term_relationships ON wp_posts.ID= tag_term_relationships.object_ID 
INNER JOIN wp_term_taxonomy AS tag_term_taxonomy ON tag_term_relationships.term_taxonomy_id= tag_term_taxonomy.term_taxonomy_id 
INNER JOIN wp_terms AS tag_terms ON tag_term_taxonomy.term_id= tag_terms.term_id 

WHERE cat_term_taxonomy.taxonomy='category' AND cat_terms.name='apple' AND tag_term_taxonomy.taxonomy='post_tag' 
GROUP BY tag_terms.name 

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

3

Вот как вы можете сделать это с помощью WordPress функции

<?php 
$tags = array(); 

$posts = get_posts('category_name=new-cat&numberposts=-1'); //get all posts in category 

foreach ($posts as $post){ 
    $posttags = get_the_tags($post->ID); //check for tags 
    if ($posttags){ 
     foreach ($posttags as $posttag){ 
      $tags[$posttag->term_id] = $posttag->name; // add to array of tag ids => names 
     } 
    } 
} 
print_r($tags); 
?> 

Это может быть предпочтительнее исходного запроса SQL, так как те часто ломаются, когда WordPress обновляет свою схему базы данных.

Смежные вопросы