Это не красиво, возможно, наркоман 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