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

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

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

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

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

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

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

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

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

Игорь Сечин 2.1 год назад

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

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

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

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

    Игорь Сечин 2.1 год назад
          <?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 2.1 год назад

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

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

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

    stepan 2.1 год назад
    <?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 2.1 год назад

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

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

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

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

    Игорь Сечин 2.1 год назад

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

    Игорь Сечин 2.1 год назад
    <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>

    Верстка

    Игорь Сечин 2.1 год назад
    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;
    }

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

    Игорь Сечин 2.1 год назад

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

    stepan 2.1 год назад

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

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

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

    Игорь Сечин 2.1 год назад

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

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

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

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