Как я могу получить список самых последних тегов в базе данных WordPress? - PullRequest
1 голос
/ 04 июня 2010

Я совсем не знаком со схемой wordpress, и мне нужно получить список или массив самых последних тегов из любого сообщения в базе данных wordpress.

Мне просто нужны данные, доступные на домашней странице, чтобы я мог ими манипулировать.

Похоже, что все функции рассчитаны на индивидуальную работу.

(WordPress действительно заставляет меня жалеть частых программистов WordPress.)

Ответы [ 2 ]

2 голосов
/ 07 марта 2011
SELECT name, slug, tag_history.tagdate
FROM (SELECT wp_term_relationships.term_taxonomy_id AS tagid,
    substr(wp_posts.post_date_gmt,1,10) AS tagdate
    FROM wp_term_relationships 
    INNER JOIN wp_term_taxonomy ON wp_term_taxonomy.term_taxonomy_id=wp_term_relationships.term_taxonomy_id 
    INNER JOIN wp_posts ON wp_posts.ID=wp_term_relationships.object_id 
    WHERE taxonomy='post_tag' ORDER BY post_date_gmt DESC, wp_posts.post_title)
AS tag_history
INNER JOIN wp_terms ON wp_terms.term_id=tag_history.tagid
GROUP BY tag_history.tagid
ORDER BY tag_history.tagdate DESC

Это то, что я написал в качестве обходного пути - уверен, что можно сделать это острее! - создать тег файла сайта (XML, требующий <LOC&> и <LASTMOD> ...) на основе даты ассоциации тега <-> post. Вы можете добавить в конце запроса LIMIT 0,10, чтобы просмотреть только 10 последних связанных тегов.

Этот запрос вернет три столбца (имя, фрагмент и дата LAST-ассоциации одного тега), которые вы можете использовать многими способами.

Помните, что wp_ - это префикс по умолчанию в дБ в WordPress. Вы должны изменить каждое вхождение с помощью $wpdb-> (см. ответ TheDeadMedic ) и обязательно установить $wpdb перед запросом.

2 голосов
/ 05 июня 2010

Это не красиво, возможно, наркоман MySQL может немного его оптимизировать;

SELECT $wpdb->terms.term_id, $wpdb->terms.name, $wpdb->terms.slug
FROM $wpdb->terms
    INNER JOIN $wpdb->term_taxonomy ON ($wpdb->terms.term_id = $wpdb->term_taxonomy.term_id)
    INNER JOIN $wpdb->term_relationships ON ($wpdb->terms.term_id = $wpdb->term_relationships.term_taxonomy_id)
    INNER JOIN $wpdb->posts ON ($wpdb->term_relationships.object_id = $wpdb->posts.ID)
WHERE $wpdb->term_taxonomy.taxonomy = 'post_tag'
ORDER BY $wpdb->posts.post_date DESC

Это в основном объединяет термин, таксономия термина, термины отношения и таблицы записей, получая термины, относящиеся к таксономии 'post_tag' и в настоящее время имеющие отношение к публикации, затем упорядочивая их по дате публикации по убыванию.

Вы можете получить один и тот же термин в наборе результатов несколько раз, но я не могу понять, как использовать GROUP BY или HAVING, чтобы исправить это, не перепутав порядок дат.

Так что пример может быть использован;

$tags= $wpdb->get_results($query); // $query being the above SQL
foreach ($tags as $tag) {
    if (!isset($stack[$tag->term_id]))
        $stack[$tag->term_id] = $tag;
}
print_r($stack); // should print an array of all tags, ordered by last used
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...