WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

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

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

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

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

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

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

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

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

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

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

0
Игорь Сечин
5 месяцев назад
  • 1
    stepan2058 www.weblancer.net/users/stepanko/?affili...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Верстка

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

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

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

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

    stepan 4 месяца назад

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

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

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

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

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

    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); ?>

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

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