WordPress как на ладони

Как вывести несколько тегов таксономии поста, а остальные спрятать под спойлер с счетчиком?

Проблема с выводом тегов таксономии под следующую верстку:

//Картинка тега 1
//Картинка тега 2
//Картинка тега 3
+еще 3 //*Кнопка с подсчетом остальных меток под спойлером
// Элементы под спойлером

//*Картинка и само название тега 4

//*Картинка и само название тега 5

//*Картинка и само название тега 6

Заметки к вопросу:
stepan год назад

логику вам никто не напишет. Это задача, которую нужно решить.
Подумать и решить.

Игорь Сечин 11 месяцев назад

Ну да, наверное стоило создать тему на хабре

0
Игорь Сечин
год назад
  • 1
    stepan2273 www.weblancer.net/users/stepanko/?affili...

    Скидывайте код, который у вас есть...
    Что вы пытались сделать - и что не выходит.
    Писать с 0 вам никто не будет.
    НА чем именно затык?
    Проблема с циклом? с foreach ?
    Или со счетчиком $count++ ?

    На чем именно застрягли?
    И да, если хотите - то можно и на хабре smile

    Игорь Сечин 11 месяцев назад
          <?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;
    		?>

    Такая конструкция выводит картинку + название нужного

    stepan 11 месяцев назад

    Проблема с выводом тегов таксономии под следующую верстку:

    +еще 3 //*Кнопка с подсчетом остальных меток под спойлером
    // Элементы под спойлером

    скиньте html код такой верстки.
    Потому что под таблицу - не очень удобно, НО я сейчас сделаю под таблицу что у Вас... просто пример - а дальше вы перенесете на нужную верстку.

    stepan 11 месяцев назад
    <?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;
    ?>
    stepan 11 месяцев назад

    "Главные" переменные:
    $loop - считаем, какой сейчас елемент в цикле
    $limit - сколько выводить до надписи

    Проходимся в первом цикле - упираемся в лимит выводим надпись, обрываем цикл
    Во втором цикле проходимся, НО уже с позициии, на которой оборвались, начинаем выводить.

    Как видно на скрине - то логика работает, проверено на рабочем сайте!

    Код бездумно не копировать, а поправить свой на основе того, что выше скинул.

    Игорь Сечин 11 месяцев назад

    Вы просто гений!
    Можно ли использовать внутри поста? Что бы получить данные конкретного поста? или нужно через wp_get_post_terms?

    Игорь Сечин 11 месяцев назад
    <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>

    Верстка

    Игорь Сечин 11 месяцев назад
    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;
    }

    Вот эту функцию вызываю внутри поста, она выводит просто списком

    Игорь Сечин 11 месяцев назад

    Вот как должно выглядеть внутри поста согласно верстке, вывод меток определенной таксономии текущего поста

    stepan 11 месяцев назад

    Ваша задача понятная, и по вёрстке понятно.
    Я повторюсь, что выше писал

    Код бездумно не копировать, а поправить свой на основе того, что выше скинул.

    Можно ли использовать внутри поста: вы сами ответили, что можно. Функция правильная.
    Аналогично в цикле перебирайте категории и выводите. Логику выше писал с переменными loop and limit

    Игорь Сечин 11 месяцев назад

    Следующая функция

    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;
    }

    С вызовом в шаблоне

    <?php echo get_tax_short( $post_id, $tax); ?>

    Идеально подходит!

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация