• DONATE to NULLED!
    Вы можете помочь Форуму и команде, поддержать финансово.
    starwanderer - модератор этого раздела будет Вам благодарен!

Помощь Шорткод для вывода меток по ID рубрик

Ed71

Постоялец
Регистрация
6 Янв 2015
Сообщения
114
Реакции
23
Добрый день. Есть два шорткода:

Один [alltags] выводит ВСЕ метки сайта в алфавитном порядке с указанием буквы.
Код:
function wph_alltags_shortcode($atts, $content) {
    $posttags = get_tags();
    if($posttags) {
        $output = '<dl class="alltags">';
        foreach($posttags as $tag) {
            $l = mb_strtoupper(mb_substr($tag->name,0,1,'UTF-8'),'UTF-8');
            if ($L != $l) {
                if ($L) $output .= '</dd>';
                    $L = $l;
                    $output .= '<dt>'.$L.'</dt><dd>';
            }
                $output.='<a href="/tag/'.$tag->slug.'">'.$tag->name.'</a> ';
        }
        $output .= '</dl>';
    }
    return $output;
}
add_shortcode('alltags', 'wph_alltags_shortcode');
//шорткод [alltags] выводящий все метки сайта end

С исключением категорий по ID

//шорткод [allcats] выводящий все рубрики сайта start
function wph_allcats_shortcode($atts, $content) {
    $categories = get_categories(['exclude'      => '1,6854,6855,6856,6868,6871,6960']);
    if($categories) {
        $output = '<dl class="allcats">';
        foreach($categories as $cat) {
            $l = mb_strtoupper(mb_substr($cat->name,0,1,'UTF-8'),'UTF-8');
            if ($L != $l) {
                if ($L) $output .= '</dd>';
                    $L = $l;
                    $output .= '<dt>'.$L.'</dt><dd>';
            }
                $output.='<a href="/'.$cat->slug.'">'.$cat->name.'</a> ';
        }
        $output .= '</dl>';
    }
    return $output;
}
add_shortcode('allcats', 'wph_allcats_shortcode');
//шорткод [allcats] выводящий все рубрики сайта end

//шорткод [alltags] выводящий все метки сайта start
function wph_alltags_shortcode($atts, $content) {
    $posttags = get_tags();
    if($posttags) {
        $output = '<dl class="alltags">';
        foreach($posttags as $tag) {
            $l = mb_strtoupper(mb_substr($tag->name,0,1,'UTF-8'),'UTF-8');
            if ($L != $l) {
                if ($L) $output .= '</dd>';
                    $L = $l;
                    $output .= '<dt>'.$L.'</dt><dd>';
            }
                $output.='<a href="/tag/'.$tag->slug.'">'.$tag->name.'</a> ';
        }
        $output .= '</dl>';
    }
    return $output;
}
add_shortcode('alltags', 'wph_alltags_shortcode');
all-tags-in-alphabet-order.gif
Второй [tagscloud cat=3,5] выводит метки по id категорий
Код:
function tag_cloud_shortcode($atts) {
    
        extract(shortcode_atts(array(
            'cat' => ''
        ), $atts));
    
        $query_args = array( 'cat' => $atts, 'posts_per_page' => -1 );
        $custom_query = new WP_Query( $query_args );
        if ($custom_query->have_posts()) :
            while ($custom_query->have_posts()) : $custom_query->the_post();
                $posttags = get_the_tags();
                if ($posttags) {
                    foreach($posttags as $tag) {
                        $all_tags[] = $tag->term_id;
                    }
                }
            endwhile;
        endif;
    
        $tags_arr = array_unique($all_tags);
        $tags_str = implode(",", $tags_arr);
    
        $args = array(
        'echo'      => false,
        'smallest'  => 10,
        'largest'   => 10,
        'unit'      => 'px',
        'number'    => 0,
        'format'    => 'flat',
        'order'     => 'count',
        'include'   => $tags_str
        );
        return wp_tag_cloud($args);
    }
    add_shortcode( 'tagscloud', 'tag_cloud_shortcode' );

Но там тэги идут друг за другом, в одну строку без указаний букв алфавита над ними. Мне же нужно, чтобы выводимые метки имели вид, как в первом варианте, но при этом, чтобы выводились не все подряд, а можно было задавать категории из которых они будут браться, т.е. как во втором варианте. Ну или как-то исключать отдельные категории, тоже вариант. По идее, мне нужно отсечь только одну категорию, тэги которой не требуется выводить. Если можно, помогите, пожалуйста с решением проблемы.
 
В первом коде меняем exclude на include?
Код:
//шорткод [allcats] выводящий все рубрики сайта start
function wph_allcats_shortcode($atts, $content) {
    $categories = get_categories(['include'      => '1,6854,6855,6856,6868,6871,6960']);
Но тащемто сам код довольно странный, Для просмотра ссылки Войди или Зарегистрируйся:
Код:
$terms= get_terms( array(
    'taxonomy' => 'category',
    'include' => array('31', '32'),
    'hide_empty' => false,
) );
И далее уже выводить/подавать дальше содержимое массива.
Тут Для просмотра ссылки Войди или Зарегистрируйся свойств категории.
 
  • Нравится
Реакции: Ed71
Спасибо, Вам, за ответ. Извиняюсь, это немного не то. По ошибке запостил сразу два шорткода вместо одного, для вывода категорий и тэгов. Там у меня, действительно, по include включаются категории, которые должны выводиться в списке, а остальные игнорируются. А шорткод, который для тэгов, вот:
Код:
function wph_alltags_shortcode($atts, $content) {
    $posttags = get_tags();
    if($posttags) {
        $output = '<dl class="alltags">';
        foreach($posttags as $tag) {
            $l = mb_strtoupper(mb_substr($tag->name,0,1,'UTF-8'),'UTF-8');
            if ($L != $l) {
                if ($L) $output .= '</dd>';
                    $L = $l;
                    $output .= '<dt>'.$L.'</dt><dd>';
            }
                $output.='<a href="/tag/'.$tag->slug.'">'.$tag->name.'</a> '; 
        }
        $output .= '</dl>';
    }
    return $output;
}
add_shortcode('alltags', 'wph_alltags_shortcode');

Мне нужно как-то сделать, чтобы тэги в нем выводились только из определенных категорий
 
Ответ Для просмотра ссылки Войди или Зарегистрируйся.
А оформление - (буква перед каждой группой по алфавиту) берётся тут:
Код:
            $l = mb_strtoupper(mb_substr($tag->name,0,1,'UTF-8'),'UTF-8');
Скрещивайте код и дерзайте ;>
 
  • Нравится
Реакции: Ed71
Добавил строку оформления, ничего не изменилось, только шрифт тэгов стал меньше.


Код:
function tag_cloud_shortcode($atts) {
     
        extract(shortcode_atts(array(
            'cat' => ''
        ), $atts));
     
        $query_args = array( 'cat' => $atts, 'posts_per_page' => -1 );
        $custom_query = new WP_Query( $query_args );
        if ($custom_query->have_posts()) :
            while ($custom_query->have_posts()) : $custom_query->the_post();
                $posttags = get_the_tags();
                if ($posttags) {
                    foreach($posttags as $tag) {
                                                                    $l = mb_strtoupper(mb_substr($tag->name,0,1,'UTF-8'),'UTF-8');
                        $all_tags[] = $tag->term_id;
                    }
                }
            endwhile;
        endif;
     
        $tags_arr = array_unique($all_tags);
        $tags_str = implode(",", $tags_arr);
     
        $args = array(
        'echo'      => false,
        'smallest'  => 10,
        'largest'   => 10,
        'unit'      => 'px',
        'number'    => 0,
        'format'    => 'flat',
        'order'     => 'count',
        'include'   => $tags_str
        );
        return wp_tag_cloud($args);
    }
    add_shortcode( 'tagscloud', 'tag_cloud_shortcode' );
 
А выводить кто буковку ($l) будет?

Код:
            if ($L != $l) {
                if ($L) $output .= '</dd>';
                    $L = $l;
                    $output .= '<dt>'.$L.'</dt><dd>';
            }
                $output.='<a href="/tag/'.$tag->slug.'">'.$tag->name.'</a> ';
        }
        $output .= '</dl>';
    }
    return $output;

А так - посмотрите в сторону Для просмотра ссылки Войди или Зарегистрируйся.
 
  • Нравится
Реакции: Ed71
Благодарю, Вас, за подсказки. Завтра буду пытаться опять чего-нибудь лепить. Плагины мне ни к чему. Ведь эти шорткоды вполне себе рабочие. Мне просто нужно, чтобы на странице тэгов не отображались метки из одной категории сайта, а из всех остальных отображались. Вот и всё. В шорткоде, выводящем рубрики, я отключил не нужные мне добавив параметр:
Код:
$categories = get_categories(['include'      => '1,6854,6855,6856,6868,6871,6960']);
Для тэгов у меня пока не получается это сделать.
А, если с плагином, то придется все равно подгонять как-то по стилю под страницу со всеми категориями сайта, да и вряд ли в нем есть такая возможность вывода меток по id категорий.
 
Доброе утро. Подскажите, пожалуйста, чайнику как правильно вывести метки в алфавитном порядке? Сделал вот так, по прежнему ничего не работает.(
Код:
function tag_cloud_shortcode($atts) {
     
        extract(shortcode_atts(array(
            'cat' => ''
        ), $atts));
     
        $query_args = array( 'cat' => $atts, 'posts_per_page' => -1 );
        $custom_query = new WP_Query( $query_args );
        if ($custom_query->have_posts()) :
            while ($custom_query->have_posts()) : $custom_query->the_post();
                $posttags = get_the_tags();
                if ($posttags) {
                    foreach($posttags as $tag) {
$l = mb_strtoupper(mb_substr($tag->name,0,1,'UTF-8'),'UTF-8');
            if ($L != $l) {
                if ($L) $output .= '</dd>';
                    $L = $l;
                    $output .= '<dt>'.$L.'</dt><dd>';
            }
                $output.='<a href="/tag/'.$tag->slug.'">'.$tag->name.'</a> '; 
        }
        $output .= '</dl>';
                        $all_tags[] = $tag->term_id;
                    }
                }
            endwhile;
        endif;
     
        $tags_arr = array_unique($all_tags);
        $tags_str = implode(",", $tags_arr);
     
        $args = array(
        'echo'      => false,
        'smallest'  => 10,
        'largest'   => 10,
        'unit'      => 'px',
        'number'    => 0,
        'format'    => 'flat',
        'order'     => 'count',
        'include'   => $tags_str
        );
        return wp_tag_cloud($args);
    }
    add_shortcode( 'tagscloud', 'tag_cloud_shortcode' );

Здесь return wp_tag_cloud($args); ведь выводится вся функция? По идее, добавленный в нее код тоже ведь должен выводиться?
 
'order' => 'count',
поменять на
'order' => 'name',
Знаете, таки заплатитие малые деньги кому то из здешних или поизучайте Для просмотра ссылки Войди или Зарегистрируйся. И прибудет с вами сила. Иначе это не работает.
 
  • Нравится
Реакции: Ed71
Назад
Сверху