Заказ по наиболее используемому тегу

Можно ли заказать страницу тега с помощью «наиболее часто используемого» тега?

Например:

Скажем, у меня есть три метки: Apple, Orange, Banana и 100 сообщений.

90 из этих сообщений отмечены Apple, 50 отмечены оранжевыми, а 20 отмечены бананом. (Некоторые из них отмечены более чем 1 тегом).

Поэтому я хочу сначала заказать сообщения, перечисленные на странице тегов, с помощью тегов Apple.

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

$args = array( 'posts_per_page' => 10, // Get 10 posts 'paged' => $paged, 'post_type' => 'post', 'tag' => $tag->slug, 'orderby' => 'modified' ); 

Solutions Collecting From Web of "Заказ по наиболее используемому тегу"

Я опасаюсь, что WP_Query не может рассчитывать количество таксономии WP_Query . См. Этот ответ . Поэтому здесь я написал для вас SQL-функцию. Он будет заказывать ваши сообщения на основе терминов post count.

 function the_dramatist_order_posts_by_tag_count( $args = '' ) { global $wpdb; $param = empty($args) ? 'post_tag' : $args; $sql = $wpdb->prepare("SELECT posts.*, terms.name AS tag, count FROM {$wpdb->posts} AS posts LEFT JOIN {$wpdb->term_relationships} AS t_rel ON (t_rel.object_id = posts.ID) LEFT JOIN {$wpdb->term_taxonomy} AS t_tax ON (t_rel.term_taxonomy_id = t_tax.term_taxonomy_id) LEFT JOIN {$wpdb->terms} AS terms ON (terms.term_id = t_tax.term_id) WHERE taxonomy LIKE '%s' ORDER BY t_tax.count DESC, terms.name", array( $param ) ); return $wpdb->get_results($sql); } 

Он вернет вам все данные из вашей таблицы сообщений с post_tag имени post_tag и этим количеством почтовых сообщений. Но у него есть простое ограничение, и если у вас есть один тег в нескольких сообщениях, тогда сообщение будет отображаться несколько раз для каждого термина post_tag к post_tag он привязан. Вы можете использовать GROUP BY posts.ID для удаления дубликатов сообщений, но это не даст вам всех условий и терминов. Таким образом, с GROUP BY posts.ID функция будет выглядеть следующим образом:

 function the_dramatist_order_posts_by_tag_count( $args = '' ) { global $wpdb; $param = empty($args) ? 'post_tag' : $args; $sql = $wpdb->prepare("SELECT posts.*, terms.name AS tag, count FROM {$wpdb->posts} AS posts LEFT JOIN {$wpdb->term_relationships} AS t_rel ON (t_rel.object_id = posts.ID) LEFT JOIN {$wpdb->term_taxonomy} AS t_tax ON (t_rel.term_taxonomy_id = t_tax.term_taxonomy_id) LEFT JOIN {$wpdb->terms} AS terms ON (terms.term_id = t_tax.term_id) WHERE taxonomy LIKE '%s' GROUP BY posts.ID ORDER BY t_tax.count DESC, terms.name", array( $param ) ); return $wpdb->get_results($sql); } 

Используйте, который лучше подходит вам.

Эта функция работает по таксономии post_tag по умолчанию. Если вы хотите использовать его с другой таксономией, просто передайте его как параметр, например, the_dramatist_order_posts_by_tag_count( 'category' )

Лучше сделайте print_r над этой функцией, прежде чем использовать ее в производстве, чтобы понять структуру данных.

Надеюсь, это поможет.

Этот простой код делает то, что вы ищете.

 $tags = get_tags( array('orderby' => 'count', 'order' => 'DESC') ); foreach ( (array) $tags as $tag ) { echo '<li><a href="' . get_tag_link ($tag->term_id) . '" rel="tag">' . $tag->name . ' (' . $tag->count . ') </a></li>'; }