Intereting Posts

Отображение пользовательской таксономии в боковой панели в двух столбцах

У меня есть пользовательский тип сообщения (фотографии) с пользовательской таксономией (категориями), и я бы хотел отобразить список таксономии на боковой панели в двух столбцах. У меня есть модифицированный фрагмент, который я нашел в другом месте для этого, но он не генерирует текущий класс для конкретной категории, в которой он включен. Возможно, это не лучший способ перечислить таксономию, поэтому я надеюсь, что кто-то предложит лучшее решение.

Вот что у меня есть сейчас:

<?php $term = get_term_by( 'name', 'categories', 'photos' ); $cat_term_id = $term->term_id; $cats = explode("<br />",wp_list_categories("title_li=&echo=0&child_of=$cat_term_id&depth=1&style=none&taxonomy=categories")); $cat_n = count($cats) - 1; for ($i=0;$i<$cat_n;$i++): if ($i<$cat_n/2): $cat_left = $cat_left.'<li>'.$cats[$i].'</li>'; elseif ($i>=$cat_n/2): $cat_right = $cat_right.'<li>'.$cats[$i].'</li>'; endif; endfor; ?> <ul class="left"> <?php echo $cat_left;?> </ul> <ul class="right"> <?php echo $cat_right;?> </ul> 

Благодаря!

Solutions Collecting From Web of "Отображение пользовательской таксономии в боковой панели в двух столбцах"

В качестве ответа на вопрос @Rutwick Gangurde Answer, вот пример.

Заметки:

  • Поместите его в файл functions.php, вызовите его в файле шаблона.
  • Измените вывод, проверив $term внутри цикла foreach
  • Прочитайте комментарии внутри функции

  function wpse25433_terms_list( $cat = array('categories'), $el = 'li', $echo = true ) { global $post; $post_id = $post->ID; $terms = wp_get_object_terms( $post_id, $cat, array( 'orderby' => 'name' ,'order' => 'ASC' ,'fields' => 'all' ); $counter = count ( $terms ); $i = 1; $left = $right = ''; foreach ( $terms as $term ) { # uncomment the following line to inspect the $term object // echo '<pre>'; print_r( $term ); echo '</pre>'; $i++; if ( $i < $counter / 2 ) $left .= ''; // @example: $term['name']; else $right .= ''; // @example: $term['whatever_value_you_need']; $i++; } $el_cont = 'ul'; if ( $el !== 'li' ) $el_cont = $el = 'div'; $output = "<{$el_cont} class='terms-container'>"; $output .= "<{$el} class='terms-left'>{$left}</{$el}>"; $output .= "<{$el} class='terms-right'>{$right}</{$el}>"; $output .= "</{$el_cont}>"; if ( $echo ) return print $output; return $output; } // Use it in your template like this: wpse25433_terms_list( array( 'name', 'some', 'taxonomies' ), 'li or div', true ); 

Это один из способов заставить меня работать (пожалуйста, проверьте прилагаемое изображение). Только что я сделал это как короткий код, вы можете использовать функцию / код, как хотите. Также замените вашу таксономию, я использовал мой !:

 add_shortcode('dis', 'displayascols'); function displayascols() { $cats = get_terms('companycategory', array('hide_empty'=>0)); $l = count($cats); if($l%2 == 1) { $l_even = $l-1; $l_half = $l_even/2; $cat_1 = array_slice($cats, 0, $l_half); $cat_2 = array_slice($cats, $l_half); } else { $l_even = $l/2; $cat_1 = array_slice($cats, 0, $l_even); $cat_2 = array_slice($cats, $l_even); } $cat_left = ''; $cat_right = ''; for ($i=0; $i<count($cat_1); $i++){ $cat_left .= '<li><a href='.$cat_1[$i]->slug.'>'.$cat_1[$i]->name.'</a></li>'; } for ($i=0; $i<count($cat_2); $i++){ $cat_right .= '<li><a href='.$cat_2[$i]->slug.'>'.$cat_2[$i]->name.'</a></li>'; } ?> <ul class="left" style="float: left;"> <?php echo $cat_left;?> </ul> <ul class="right" style="float: right;"> <?php echo $cat_right;?> </ul><?php } 

Дай мне знать! вот результат

Вы можете использовать wp_get_object_terms . Он возвращает массив, оставив вам лучший контроль над дисплеем.

Вы можете сделать это с небольшим CSS, предполагая, что вы начинаете с классического списка ( <ul class="foo"><li></li></ul> ):

 .foo { -moz-column-count: 2; -moz-column-gap: 10px; -webkit-column-count: 2; -webkit-column-gap: 10px; column-count: 2; column-gap: 10px; } 

Для более старого браузера просто введите li float.