Ed71
Постоялец
- Регистрация
- 6 Янв 2015
- Сообщения
- 115
- Реакции
- 23
- Автор темы
- #1
Добрый день. Есть два шорткода:
Один [alltags] выводит ВСЕ метки сайта в алфавитном порядке с указанием буквы.

Второй [tagscloud cat=3,5] выводит метки по id категорий
Но там тэги идут друг за другом, в одну строку без указаний букв алфавита над ними. Мне же нужно, чтобы выводимые метки имели вид, как в первом варианте, но при этом, чтобы выводились не все подряд, а можно было задавать категории из которых они будут браться, т.е. как во втором варианте. Ну или как-то исключать отдельные категории, тоже вариант. По идее, мне нужно отсечь только одну категорию, тэги которой не требуется выводить. Если можно, помогите, пожалуйста с решением проблемы.
Один [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');

Второй [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' );
Но там тэги идут друг за другом, в одну строку без указаний букв алфавита над ними. Мне же нужно, чтобы выводимые метки имели вид, как в первом варианте, но при этом, чтобы выводились не все подряд, а можно было задавать категории из которых они будут браться, т.е. как во втором варианте. Ну или как-то исключать отдельные категории, тоже вариант. По идее, мне нужно отсечь только одну категорию, тэги которой не требуется выводить. Если можно, помогите, пожалуйста с решением проблемы.