Контакты
Местоположение
Россия

Наибольший вклад в теги

Все теги (1)

Лучшие ответы пользователя

Все ответы (1)
  • Как реализовать такой цикл вывода постов на wp?

    vasmor
    @vasmor
    Интересуюсь
    Есть такой вариант:
    Получаем посты по $term

    $query = new WP_Query( array(
        'post_type' 		=> $type, // Ваш тип записи
    	'posts_per_page'	=> -1,        
    	'tax_query' => array(
    		array(
    			'taxonomy' => $tax, // Такса типа записи
    			'field'    => 'slug', 
    			'terms'    => $term // Нужный терм
    		)
    	)
    ) );


    Через цикл создаем массив id всех меток, присутствующих в полученных на предыдущем шаге постах

    $all_tags = [];
    
    if ( $query->have_posts() ) {
    	while ( $query->have_posts() ) {
    		$query->the_post();
    
    	        $cur_terms = get_the_terms( $post->ID, $post_tag ); // $post_tag - нужная таксономия (если это стандартная метка поста, то $post_tag = 'post_tag')
    	        if( is_array( $cur_terms ) ){
    		        foreach( $cur_terms as $cur_term ){
    			         $all_tags[] = $cur_term->term_id;
    		       }
    	        }        	
    	}
    }
    // Возвращаем оригинальные данные поста. Сбрасываем $post.
    wp_reset_postdata();
    
    $all_tags = array_unique($all_tags); // Оставляем уникальные значения в массиве


    Выводим кнопки табов

    echo '<ul>';
    
    	$i = 0;
    	foreach ( $all_tags as $tag ) {
    		$class_active = $i === 0 ? ' tab-active' : ''; // для первой кнопки ставим активный класс
    		$tag_name = get_term( intval( $tag ) )->name; // Наименование метки
    		echo '<li class="tab-caption' . $class_active . '">' . $tag_name . '</li>';
    	$i++;
    	}
    
    echo '</ul>';


    Выводим контент табов

    echo '<div>';
    
    	$k = 0;
    	foreach ( $all_tags as $tag ) {
    		$class_active = $k === 0 ? ' tab-active' : '';
    		
    		echo '<div class="tab-content' . $class_active . '">';
    			if ( $query->have_posts() ) {
    				while ( $query->have_posts() ) {
    					$query->the_post();
    
    				        if ( has_term( intval( $tag ), $post_tag ) ) { // Выводим только те посты, в которых есть текущая метка в цикле
    				        	the_content(); // Здесь вывод данных поста. Как вариант - get_template_part( 'path/to/template' );
    				        }    	
    				}
    			}
    			// Возвращаем оригинальные данные поста. Сбрасываем $post.
    			wp_reset_postdata();
    		echo '</div>';
    	$k++;
    	}
    
    echo '</div>';
    Ответ написан
    7 комментариев