Вывод всех Тегов определенной рубрики на самой странице рубрики

(Ответов: 13, Просмотров: 954)
Страница 1 из 2 12 Последняя
  1. Гугуру Аватар для Inforation
    • Регистрация: 10.03.2013
    • Сообщений: 887
    • Репутация: 166
    • Webmoney BL: ?
    Вообщем нужно чтоб на странице каждой рубрики выводился список тегов определенной рубрики.

    То есть если мы находимся на странице рубрики под названием "Природа" - должны отображаться все теги (метки) из этой рубрики. А если мы находимся на странице рубрики под названием "Машины" - по аналогии с выше, только не должны видеть метки из других категорий.

    Я нашел вот такое решение:
    Этот код вставляется в functions.php
    PHP код:
    function keengo_tag_cloud$args '' ) {
        
    // Стандартные параметры функции
        
    $defaults = array(
            
    'smallest' => 8'largest' => 22'unit' => 'pt''category' => 1
        
    );
        
    $args wp_parse_args$args$defaults );
        global 
    $wpdb;
        
        
    // Получаем ID таксономии выбранной категории и по нему получаем все посты
        
    $keengo_category $args['category'];
        
    $keengo_term_taxonomy_id $wpdb->get_var("SELECT term_taxonomy_id FROM $wpdb->term_taxonomy WHERE term_id = $keengo_category AND taxonomy = 'category' ");
        
    $keengo_posts $wpdb->get_results("SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id = $keengo_term_taxonomy_id "ARRAY_A);
        
    // Преобразовываем полученные ID постов в строку
        
    $keengo_post_IDs_array = array();
        foreach ( 
    $keengo_posts as $keengo_post ) {
            
    $keengo_post_IDs_array[] = $keengo_post['object_id'];
        }
        
    $keengo_post_IDs implode(','$keengo_post_IDs_array);
        
        
    // Получаем список тегов для выбранных из категории постов
        
    $keengo_metas_array $wpdb->get_results("SELECT term_taxonomy_id, count(object_id) FROM $wpdb->term_relationships WHERE object_id IN ($keengo_post_IDs) GROUP BY term_taxonomy_id "ARRAY_A);
        
    $keengo_metas = array();
        
    $count_max 0;
        
    $count_min 1000000;
        
    // Для каждлго тега находим название, ссылку, количество
        
    foreach ( $keengo_metas_array as $meta_key => $keengo_meta ) {
            
    $keengo_meta_term_taxonomy_id $keengo_meta['term_taxonomy_id'];
            
    $keengo_taxonomy $wpdb->get_var("SELECT taxonomy FROM $wpdb->term_taxonomy WHERE term_taxonomy_id = $keengo_meta_term_taxonomy_id ");
            if ( 
    $keengo_taxonomy == 'post_tag' ) {
                
    $keengo_term_id $wpdb->get_var("SELECT term_id FROM $wpdb->term_taxonomy WHERE term_taxonomy_id = $keengo_meta_term_taxonomy_id ");
                
    $keengo_term_name $wpdb->get_var("SELECT name FROM $wpdb->terms WHERE term_id = $keengo_term_id ");
                
    $keengo_metas[$keengo_term_name]['link'] = get_tag_link($keengo_term_id);
                
    $keengo_metas[$keengo_term_name]['count'] = $keengo_meta['count(object_id)'];
                
                if ( 
    $keengo_meta['count(object_id)'] > $count_max ) {
                    
    $count_max $keengo_meta['count(object_id)'];
                }
                if ( 
    $keengo_meta['count(object_id)'] < $count_min ) {
                    
    $count_min $keengo_meta['count(object_id)'];
                }
            }
        }
        
    // Сортируем полученный массив
        
    ksort($keengo_metas);
        
        
    // Формируем вывод тегов с указанием размера шрифта для наглядности
        
    $count_delta $count_max $count_min;
        
    $size_min $args['smallest'];
        
    $size_max $args['largest'];
        
    $size_delta $size_max $size_min;
        foreach ( 
    $keengo_metas as $name => $meta ) {
            
    $size $size_min $size_delta * ($meta['count'] - $count_min) / $count_delta;
            echo(
    '<a href="'.$meta['link'].'" style="font-size: '.$size.$args['unit'].'">'.$name.'</a> ');
        }

    След код вставляем в archive.php

    PHP код:
    if ( function_exists('keengo_tag_cloud') ){
        
    $args = array(
             
    'smallest'    => 12
            
    ,'largest'    => 18
            
    ,'unit'        => 'px'
            
    ,'category'    => 5
        
    );
        
    keengo_tag_cloud$args );

    А этим кодом мы собственно и выводим метки определенной рубрики, которую указываем
    PHP код:
    ,'category'    => 
    Но почему то у меня показывается метки определенной рубрики во всех категориях...
    ---------------------------------------HELPPP------------------------------------------------
    • 0
  2. Рождённый в СССР Аватар для Gann
    • Регистрация: 30.04.2012
    • Сообщений: 1,073
    • Репутация: 310
    Inforation, добавьте проверку (если мы находимся в категории с ид=5, то выводим указанный вами код).

    п.с. то есть примерно так:
    if ( function_exists('keengo_tag_cloud')
    if ( is_category('5')){
    $args = array(
    'smallest' => 12
    ,'largest' => 18
    ,'unit' => 'px'
    ,'category' => 5
    );
    keengo_tag_cloud( $args );
    }
    Последний раз редактировалось Gann; 28.01.2016 в 18:38.
    • 0
  3. Гугуру Аватар для Inforation
    • Регистрация: 10.03.2013
    • Сообщений: 887
    • Репутация: 166
    • Webmoney BL: ?
    Gann, как ее добавить ?) я уже сообразил что надо нечто такое дописать elseif ( is_category('2') ) :
    но как правильно вставить это я хз, я в функциях дудуду
    • 0
  4. Рождённый в СССР Аватар для Gann
    • Регистрация: 30.04.2012
    • Сообщений: 1,073
    • Репутация: 310
    Inforation, указал. Попробуйте так.

    Я тож так то не особо... наверняка можно упростить по типу if ( function_exists('keengo_tag_cloud') || is_category('5')){
    • 0
  5. Гугуру Аватар для Inforation
    • Регистрация: 10.03.2013
    • Сообщений: 887
    • Репутация: 166
    • Webmoney BL: ?
    первый вариант, - ошибка 500, где то что то не так..
    Второй упрощенный вариант, не работает, но уже нету 500 ошибки.
    Мб я не туда тыкаю сам код ?
    Я его вставляю перед
    PHP код:
    <h1 class="archive-title">
                    <?php
                    
    if ( is_category() ) :
                        
    single_cat_title();

                    elseif ( 
    is_tag() ) :
                        
    single_tag_title();
    ......
    То есть по сути я вывожу просто в файле archives.php, но почему то не срабатывает проверка с id (
    • 0
  6. Рождённый в СССР Аватар для Gann
    • Регистрация: 30.04.2012
    • Сообщений: 1,073
    • Репутация: 310
    Inforation, надо перед выводом постов из категории или после. То есть перед <?php if (have_posts()) { ?> или после <?php } //endif; ?>

    Почитал тут по условностям, надо использовать AND или &&. Т.е. получается надо вставлять в архиве.пхп:

    <?php if ( function_exists('keengo_tag_cloud') && is_category('5')){
    $args = array(
    'smallest' => 12
    ,'largest' => 18
    ,'unit' => 'px'
    ,'category' => 5
    );
    keengo_tag_cloud( $args );
    }
    ?>

    ---------- Сообщение добавлено 18:34 ---------- Предыдущее 18:29 ----------

    Воткнул к себе на сайт - всё работает ОК. Так вот и нашли вам решение
    • 1

    Спасибо сказали:

    Inforation(28.01.2016),
  7. Гугуру Аватар для Inforation
    • Регистрация: 10.03.2013
    • Сообщений: 887
    • Репутация: 166
    • Webmoney BL: ?
    Gann, Радости полные штаны ))) огромное спасибо, я кстати методом тыка исключил из названия каждой метки определенное слово (чтоб не спамить), мб подсказать если нужно ?

    Теперь получается надо натыкать таких кодов для каждой рубрики ?
    • 0
  8. Гуру
    • Регистрация: 20.01.2013
    • Сообщений: 720
    • Репутация: 189
    • Webmoney BL: ?
    Цитата Сообщение от Inforation Посмотреть сообщение
    Теперь получается надо натыкать таких кодов для каждой рубрики ?
    зачем для каждой, если можно использовать id текущей категории
    PHP код:
    $category get_categoryget_query_var'cat' ) );
    $cat_id $category->cat_ID
    • 0
  9. Гугуру Аватар для Inforation
    • Регистрация: 10.03.2013
    • Сообщений: 887
    • Репутация: 166
    • Webmoney BL: ?
    Цитата Сообщение от thomas Посмотреть сообщение
    зачем для каждой, если можно использовать id текущей категории
    PHP код:
    $category = get_category( get_query_var( 'cat' ) );
    $cat_id = $category->cat_ID
    куда это втыкнуть ?)
    • 0
  10. Опытный Аватар для redeyer
    • Регистрация: 07.01.2015
    • Сообщений: 499
    • Репутация: 187
    • Webmoney BL: ?
    Inforation, попробуйте так:
    PHP код:
    if ( function_exists('keengo_tag_cloud')){ 
    $args = array( 
    'smallest' => 12 
    ,'largest' => 18 
    ,'unit' => 'px' 
    ); 
    $args['category'] = get_query_var('cat');
    keengo_tag_cloud$args ); 

    Последний раз редактировалось redeyer; 28.01.2016 в 20:53.
    Канал в телеграм "Хостинг Эксперт - мой опыт выбора и работы с хостерами
    • 1

    Спасибо сказали:

    Inforation(29.01.2016),
Страница 1 из 2 12 Последняя

Похожие темы

Темы Раздел Ответов Последний пост
Вывод последней записи из каждой рубрики и принудительный вывод
WordPress 0 20.06.2015 04:46
Как сделать меню для определенной рубрики в Wordpress и к постам в ней?
WordPress 1 02.04.2014 17:54
Как скрыть записи из определённой рубрики WordPress
WordPress 4 07.05.2013 11:36
Запрет к индексации определенной рубрики в WordPress
WordPress 7 11.08.2012 23:46
Как скрыть записи из определённой рубрики
Web программирование 3 04.06.2012 16:05

У кого попросить инвайт?

Вы можете попросить инвайт у любого модератора:

Информеры