Wordpress: генерировать массив тегов из сообщений в определенной категории - PullRequest
0 голосов
/ 18 июня 2009

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

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

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

Заранее спасибо за помощь.

Ответы [ 2 ]

3 голосов
/ 22 июня 2009

Вот как вы можете сделать это, используя функции 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 обновляет схему своей базы данных.

1 голос
/ 19 июня 2009

Я не уверен, что вы можете достичь желаемого, используя функции, которые предоставляет 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 с таблицами таксономии, чтобы получить идентификаторы записей в нужной категории, а затем еще пару раз соединяете эти идентификаторы с таблицами таксономии, чтобы получить связанные теги.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...