Форум программистов, компьютерный форум, киберфорум
WordPress
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
3 / 9 / 0
Регистрация: 22.04.2017
Сообщений: 93

Вывод похожих записей по тегу, а именно согласно количеству привязанных записей к тегу

24.07.2018, 13:09. Показов 1908. Ответов 3

Студворк — интернет-сервис помощи студентам
Всем привет! Этот код выводит похожие записи по тегу:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php $tags = wp_get_post_tags($post->ID);
if ($tags) {
 $tag_ids = array();
 foreach($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id;
 $args=array(
 'tag__in' => $tag_ids,
 'post__not_in' => array($post->ID),
 'tag__in' => $tag_ids,
 'caller_get_posts'=>1,
 'showposts'=>5
 );
$my_query = new wp_query($args); if( $my_query->have_posts() ) { echo '<ul>'; while ($my_query->have_posts()) { $my_query->the_post(); ?>
<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
<?php } echo '</ul>'; } wp_reset_query(); } ?> 
<?php } else { ?>
Вопрос такой: как сделать так, чтобы вывод формировался на основании количества записей у тега?

Например, есть теги: зеленый, красный, черный.
К тегу "зеленый" привязано 3 записи, к тегу "красный" 15 записей, а к тегу "черный" 50 записей.
Нужно, чтобы сначала выводились похожие записи по тегу "зеленый", потом "красный" и потом "черный", то есть согласно их числу записей на возрастание. Буду очень благодарен, если просто подкорректируете код, если такое возможно!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.07.2018, 13:09
Ответы с готовыми решениями:

Вывод похожих записей с БД
Здравствуйте. Необходима помощь специалиста! Имеется статья, которая берется с БД mysql Под ней хочу сделать &quot;Похожие...

Вывод похожих записей order by rand
Везде пишут, что использование order by rand плохо т.к. нагружает базу данных и все такое. есть код, для вывода случайных записей на...

Excel и группы записей. Импорт записей, согласно категории(которая указана в экселе)
Задаю вопрос, т.к. не нашёл ни в яндексе, ни тут ответ. Просьба ткнуть носом, т.к. считаю что вопрос на уровне новичка и тема должна была...

3
 Аватар для HectorPrima
716 / 473 / 258
Регистрация: 19.12.2014
Сообщений: 1,801
26.07.2018, 04:21
Лучший ответ Сообщение было отмечено ENOVSKIY как решение

Решение

После поста:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$tags = wp_get_post_tags( $post->ID );
$tag_ids = wp_list_pluck( $tags, 'term_id' );
$args = [
    'tag__in' => $tag_ids,
    'post_type' => 'post',
    'post__not_in' => array($post->ID),
    'tag__in' => $tag_ids,
    'ignore_sticky_posts'=>true,
    'showposts'=>5,
    'orderby'=>'post_tag',
    'order'=>'desc'
];
add_filter('posts_clauses', 'orderby_tax_clauses', 10, 2 );
$query = new WP_Query( $args );
remove_filter('posts_clauses','orderby_tax_clauses');
while ( $query->have_posts() ) {
    $query->the_post();
    # здесь шпарим свой код вывода связанных постов
    echo "<h2>".the_title()."</h2>";
    # end 
}
В functions.php вставляем:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function orderby_tax_clauses( $clauses, $wp_query ) {
    global $wpdb;
    $taxonomies = get_taxonomies();
    foreach ($taxonomies as $taxonomy) {
        if ( isset( $wp_query->query['orderby'] ) && $taxonomy == $wp_query->query['orderby'] ) {
            $clauses['join'] .=<<<SQL
            LEFT JOIN {$wpdb->term_taxonomy} USING (term_taxonomy_id)
            LEFT JOIN {$wpdb->terms} USING (term_id)
SQL;
            $clauses['where'] .= " AND (taxonomy = '{$taxonomy}' OR taxonomy IS NULL)";
            $clauses['groupby'] = "object_id";
            $clauses['orderby'] = "GROUP_CONCAT({$wpdb->terms}.name ORDER BY {$wpdb->term_taxonomy}.count ASC) ";
            $clauses['orderby'] .= ( 'ASC' == strtoupper( $wp_query->get('order') ) ) ? 'ASC' : 'DESC';
        }
    }
    return $clauses;
}
Написано и протестировано на основе поста https://wordpress.stackexchang... y-taxonomy

Добавлено через 12 минут
Чутка исправления
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$tags = wp_get_post_tags( $post->ID );
$tag_ids = wp_list_pluck( $tags, 'term_id' );
$args = [
    'tag__in' => $tag_ids,
    'post_type' => 'post',
    'post__not_in' => array($post->ID),
    'tag__in' => $tag_ids,
    'ignore_sticky_posts'=>true,
    'showposts'=>5,
    'orderby'=>'post_tag',
    'order'=>'asc'
];
add_filter('posts_clauses', 'orderby_tax_clauses', 10, 2 );
$query = new WP_Query( $args );
remove_filter('posts_clauses','orderby_tax_clauses');
while ( $query->have_posts() ) {
    $query->the_post();
    # здесь шпарим свой код вывода связанных постов
    echo "<h2>".the_title()."</h2>";
    # end
}
и
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function orderby_tax_clauses( $clauses, $wp_query ) {
    global $wpdb;
    $taxonomies = get_taxonomies();
    foreach ($taxonomies as $taxonomy) {
        if ( isset( $wp_query->query['orderby'] ) && $taxonomy == $wp_query->query['orderby'] ) {
            $clauses['join'] .=<<<SQL
            LEFT JOIN {$wpdb->term_taxonomy} USING (term_taxonomy_id)
            LEFT JOIN {$wpdb->terms} USING (term_id)
SQL;
            $clauses['where'] .= " AND (taxonomy = '{$taxonomy}' OR taxonomy IS NULL)";
            $clauses['groupby'] = "object_id";
            $clauses['orderby'] = "{$wpdb->term_taxonomy}.count ";
            $clauses['orderby'] .= ( 'ASC' == strtoupper( $wp_query->get('order') ) ) ? 'ASC' : 'DESC';
        }
    }
    return $clauses;
}
1
3 / 9 / 0
Регистрация: 22.04.2017
Сообщений: 93
07.09.2018, 21:54  [ТС]
Спасибо огромное! Все работает!

Добавлено через 32 минуты
Мда... проверил и оказалось, что работает через раз. Например 2 записи с тегом черный и 15 записей с тегом белый. Начинает выводить первые похожие записи с тегом белый, хотя тега "черный" по количеству меньше.
0
3 / 9 / 0
Регистрация: 22.04.2017
Сообщений: 93
03.12.2018, 17:42  [ТС]
Цитата Сообщение от HectorPrima Посмотреть сообщение
$tags = wp_get_post_tags( $post->ID );
$tag_ids = wp_list_pluck( $tags, 'term_id' );
$args = [
* * 'tag__in' => $tag_ids,
* * 'post_type' => 'post',
* * 'post__not_in' => array($post->ID),
* * 'tag__in' => $tag_ids,
* * 'ignore_sticky_posts'=>true,
* * 'showposts'=>5,
* * 'orderby'=>'post_tag',
* * 'order'=>'desc'
];
add_filter('posts_clauses', 'orderby_tax_clauses', 10, 2 );
$query = new WP_Query( $args );
remove_filter('posts_clauses','orderby_t ax_clauses');
while ( $query->have_posts() ) {
* * $query->the_post();
* * # здесь шпарим свой код вывода связанных постов
* * echo "<h2>".the_title()."</h2>";
* * # end
}

Без проблем не обошлось. Значит установил этот код перед выводом комментариев и тут появились комментарии из других статей. Последовательность такая:

- контент
- похожие статьи
- комментарии и форма для комментирования

У статьи на которой находился комментов нет. Но под статьей вывелись комменты из тех статей, что были рекомендованы к чтению. Тут какой-то косяк с циклами?

Добавлено через 12 минут
Добавил <? wp_reset_query(); } ?> в конце
Теперь все ок
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.12.2018, 17:42
Помогаю со студенческими работами здесь

Вывод статьи по тегу
Таблица новостей: -news_id -title -tags Таблица тэгов: -tag_id -tag_title Возможно ли в sql создать запрос на вывод...

Вывод записей по количеству комментариев
Как вывести вывести список страниц по количеству комментариев (по убыванию) на главной странице сайта? Заранее спасибо.

Вывод записей из БД и группировка по количеству
Доброго времени суток! Никогда не работал с оператором COUNT но сейчас пришлось. И я честно говоря не знаю с какой стороны зайти даже....

Drupal 8. Вывод тизеров по тегу
Задача такая. Есть ноды типа &quot;Местность&quot; - Абхазия, Крым и т.п. При выводе надо под описанием местности вывести блок с тизерами нод,...

Вывод по определенному количеству записей в строке
Всем привет! WP стал изучать совсем недавно, так что извиняйте если что) Вопрос состоит во взаимодействии WP и Bootstrap. Допустим первый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru