@mEdvEd71

Как добавить в шорткод вывод меток сайта в алфавитном порядке?

Доброе утро. Есть шорткод выводящий метки сайта на отдельной странице.
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' );

Мне нужно, чтобы они располагались по алфавиту, т.е., например, заглавная буква А и под ней все тэги, начинающиеся на А. Заглавная буква B, под ней все тэги на B и так далее. Вот как на этом скрине.
627b751d2dc1b653440583.gif
Сейчас они все располагаются просто в одну строку, друг за другом. Подскажите, пожалуйста, как добавить такой параметр в данный шорткод? Заранее, огромное спасибо.
  • Вопрос задан
  • 61 просмотр
Пригласить эксперта
Ответы на вопрос 1
@hellion35
Нужно для начала получить метки массивом, для этого поменяйте параметр "format" на "array"

$items = wp_tag_cloud($args);
$array = array();
foreach( $items as $item ){
     $letter = mb_substr( $item, 0, 1 );  //обрезаем первую букву метки
     $array[$letter][] = $item;
}

Теперь получается что в массиве идет разбиение по первой букве метки.
Можно циклом выводить так как нужно.
ob_start();
foreach( $array as $l => $i ){
    echo $l;
    foreach( $i as $item ){
         echo $item; //тут список меток на букву.
    }
}
return ob_get_clean();

Я таким образом разбивал города по буквам, возможно есть вариант лучше.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы