Как вывести несколько тегов таксономии поста, а остальные спрятать под спойлер с счетчиком?
Проблема с выводом тегов таксономии под следующую верстку:
//Картинка тега 1
//Картинка тега 2
//Картинка тега 3
+еще 3 //*Кнопка с подсчетом остальных меток под спойлером
// Элементы под спойлером
//*Картинка и само название тега 4
//*Картинка и само название тега 5
//*Картинка и само название тега 6
логику вам никто не напишет. Это задача, которую нужно решить.
Подумать и решить.
Ну да, наверное стоило создать тему на хабре
Скидывайте код, который у вас есть...
Что вы пытались сделать - и что не выходит.
Писать с 0 вам никто не будет.
НА чем именно затык?
Проблема с циклом? с foreach ?
Или со счетчиком $count++ ?
На чем именно застрягли?
И да, если хотите - то можно и на хабре
<?php $terms = get_terms( [ 'taxonomy' => 'taxa', 'hide_empty' => false, 'number' => $num ] ); if ( $terms ): echo '<table>'; foreach ( $terms as $term ) { $term_id = $term->term_id; $term_mini_img_att = carbon_get_term_meta( $term_id, 'mini_img' ); $term_mini_img_src = wp_get_attachment_url( $term_mini_img_att ); echo '<tr> <td><a href="' . get_term_link( $term_id, 'deposit' ) . '">' . $term->name . '</a></td> <td><img class="lazy" data-src="' . $term_mini_img_src . '" alt=""></td> </tr>'; } echo '</table>'; else: echo __( 'methods not found', 'themes' ); endif; ?>Такая конструкция выводит картинку + название нужного
скиньте html код такой верстки.
Потому что под таблицу - не очень удобно, НО я сейчас сделаю под таблицу что у Вас... просто пример - а дальше вы перенесете на нужную верстку.
<?php $limit = 3; $terms = get_terms( [ 'taxonomy' => 'product_cat', 'hide_empty' => false, ] ); if ( $terms ): $count_terms = count( $terms ); echo '<table>'; $loop = 0; foreach ( $terms as $term ) { $loop++; $term_id = $term->term_id; $term_mini_img_att = carbon_get_term_meta( $term_id, 'mini_img' ); $term_mini_img_src = wp_get_attachment_url( $term_mini_img_att ); echo '<tr> <td><a href="' . get_term_link( $term_id, 'product_cat' ) . '">' . $term->name . '</a></td> <td><img class="lazy" data-src="' . $term_mini_img_src . '" alt=""></td> </tr>'; if ( $loop == $limit && $count_terms > $limit ) { echo '<tr> <td>+ еще '. ( $count_terms - $limit).'</td> <td></td> </tr>'; break; } } if ( $count_terms > $limit ) { $loop = 0; foreach ( $terms as $term ) { $loop++; if ( $loop > $limit ) { $term_id = $term->term_id; $term_mini_img_att = carbon_get_term_meta( $term_id, 'mini_img' ); $term_mini_img_src = wp_get_attachment_url( $term_mini_img_att ); echo '<tr> <td style="background: yellow;"><a href="' . get_term_link( $term_id, 'product_cat' ) . '">' . $term->name . '</a></td> <td style="background: yellow;"><img class="lazy" data-src="' . $term_mini_img_src . '" alt=""></td> </tr>'; } } } echo '</table>'; else: echo __( 'methods not found', 'themes' ); endif; ?>"Главные" переменные:
$loop - считаем, какой сейчас елемент в цикле
$limit - сколько выводить до надписи
Проходимся в первом цикле - упираемся в лимит выводим надпись, обрываем цикл
Во втором цикле проходимся, НО уже с позициии, на которой оборвались, начинаем выводить.
Как видно на скрине - то логика работает, проверено на рабочем сайте!
Код бездумно не копировать, а поправить свой на основе того, что выше скинул.
Вы просто гений!
Можно ли использовать внутри поста? Что бы получить данные конкретного поста? или нужно через wp_get_post_terms?
<div class="info-property info-property--payments"> <div class="info-property-label">Пополнение</div> <div class="info-property-value-items"> <div class="info-property-value-item icon" style="background-image: url('taxa1.jpg');"></div> <div class="info-property-value-item icon" style="background-image: url('taxa2.jpg');"></div> <div class="info-property-value-item icon" style="background-image: url('taxa3.jpg');"></div> <div class="tooltip tooltip--right"> <button class="info-property-link info-property-link--show-more tooltip__trigger">+2 КНОПКА</button> <div class="tooltip__content"> <div class="tooltip__list"> <div class="tooltip__item"> <div class="tooltip__item-aside icon" style="background-image: url('taxa4.jpg');"></div> <div class=" tooltip__item-content ">Название таксономии 4</div> </div> <div class="tooltip__item"> <div class="tooltip__item-aside icon" style="background-image: url( 'taxa5.jpg');"></div> <div class="tooltip__item-content">Название таксономии 5</div> </div> </div> </div> </div> </div> </div>Верстка
function get_tax_short($post_id, $tax, $text) { $ret = ''; $term_list = wp_get_post_terms($post_id, $tax, array('fields' => 'all')); $echo_global = null; if ($tax == 'deposit') { $echo_global = carbon_get_theme_option('page_dm'); } else if ($tax == 'cur') { $echo_global = carbon_get_theme_option('page_cr'); } else if ($tax == 'ash') { $echo_global = carbon_get_theme_option('page_cot'); } else if ($tax == 'oft') { $echo_global = carbon_get_theme_option('page_oft'); } else if ($tax == 'restr') { $echo_global = carbon_get_theme_option('page_rested'); } else if ($tax == 'lic') { $echo_global = carbon_get_theme_option('page_lic'); } if ($term_list): $list = array(); foreach ($term_list as $item) { $list[] = $item->term_id; } $new_list = array(); foreach ($list as $item) { $term_title = get_term_by('id', $item, $tax); $hide_or_no = carbon_get_term_meta($term_title->term_id, 'hide_link'); if ($hide_or_no or $echo_global) { $new_list[] = $term_title->name; } else { $new_list[] = "<a href='" . get_term_link($term_title->term_id, $tax) . "'>" . $term_title->name . "</a>"; } } if ($new_list): $ret .= '<tr><td>' . $text . '</td><td>' . implode(', ', $new_list) . '</td></tr>'; endif; endif; return $ret; }Вот эту функцию вызываю внутри поста, она выводит просто списком
Вот как должно выглядеть внутри поста согласно верстке, вывод меток определенной таксономии текущего поста
Ваша задача понятная, и по вёрстке понятно.
Я повторюсь, что выше писал
Можно ли использовать внутри поста: вы сами ответили, что можно. Функция правильная.
Аналогично в цикле перебирайте категории и выводите. Логику выше писал с переменными loop and limit
Следующая функция
function get_tax_short($post_id, $tax) { $limit = 3; $terms = wp_get_post_terms($post_id, $tax, array('fields' => 'all')); $echo_global = null; if ($tax == 'deposit') { $echo_global = carbon_get_theme_option('page_dm'); } else if ($tax == 'curr') { $echo_global = carbon_get_theme_option('page_cyr'); } else if ($tax == 'cash') { $echo_global = carbon_get_theme_option('page_cash'); } else if ($tax == 'soft') { $echo_global = carbon_get_theme_option('page_soft'); } else if ($tax == 'rest') { $echo_global = carbon_get_theme_option('page_rest'); } else if ($tax == 'lic') { $echo_global = carbon_get_theme_option('page_lic'); } if ( $terms ): $count_terms = count( $terms ); echo '<table>'; $loop = 0; foreach ( $terms as $term ) { $loop++; $term_id = $term->term_id; $term_mini_img_att = carbon_get_term_meta( $term_id, 'mini_img' ); $term_mini_img_src = wp_get_attachment_url( $term_mini_img_att ); echo '<tr> <td><a href="' . get_term_link( $term_id, $tax ) . '">' . $term->name . '</a></td> <td><img class="lazy" data-src="' . $term_mini_img_src . '" alt=""></td> </tr>'; if ( $loop == $limit && $count_terms > $limit ) { echo '<tr> <td>+ еще '. ( $count_terms - $limit).'</td> <td></td> </tr>'; break; } } if ( $count_terms > $limit ) { $loop = 0; foreach ( $terms as $term ) { $loop++; if ( $loop > $limit ) { $term_id = $term->term_id; $term_mini_img_att = carbon_get_term_meta( $term_id, 'mini_img' ); $term_mini_img_src = wp_get_attachment_url( $term_mini_img_att ); echo '<tr> <td style="background: yellow;"><a href="' . get_term_link( $term_id, $tax ) . '">' . $term->name . '</a></td> <td style="background: yellow;"><img class="lazy" data-src="' . $term_mini_img_src . '" alt=""></td> </tr>'; } } } echo '</table>'; endif; }С вызовом в шаблоне
Идеально подходит!