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

Работа с таксономиями

Нужна помощь с пояснением и направлением, суть работы такова:

  1. Есть произвольный тип записи "Продукция", у него зарегал таксономию "Категории товаров".

  2. У каждой из категорий сделал подкатегорию.

  3. Записям указал необходимые подкатегории.

  4. Необходимо чтобы при выборе в меню - родительской категории, открывалась страница с содержащимися на ней её подкатегориями, а у этих подкатегории были свои записи (миниатюры).

  5. При нажатии на миниатюру должен быть переход на шаблон страницы этой продукции.

Как это реализовать? Какая должна быть иерархия шаблонов?

0
timber
2.2 года назад
  • 1
    stepan2278 www.weblancer.net/users/stepanko/?affili...

    локуги вывода то ли ПОДКАТЕГОРИЙ то ли ЗАПИСЕЙ категории - нужно писать в файле, который выводит эту категорию. Н-р, taxonomy-service_cat.php
    service_cat - это у меня категория услуг.

    timber 2.2 года назад

    Что то понимаю, но всё же..

    1. Сделал произвольный тип записи "Продукция", зарегал его в functions.php;
    2. Сделал этой записи "Продукция" - таксономию "Категории продукции", её также зарегал в functions.php;
    3. В WP добавил пару товаров;
    4. В WP добавил 5 категорий, у них сделал у каждой ещё подкатегории;
    5. Товарам присвоил нужные подкатегории;
    6. В меню вывел 5 родительских категорий (При переходе по ним нужно попадать на страницу с их подкатегориями и их записями);
    7. Зарегал файл taxonomy.php в нём вывожу свои подкатегории;
    8. Подкатегории (Названия и их описания получается вывести), но вот у каждой подкатегории выводятся абсолютно все записи, мне же нужно вывести только те что принадлежат им;
    9. Ну и собственно при нажатии на одну из этих записей нужно перейти на страницу с её подробным описанием ( за это я так понимаю отвечает файл single-product.php).

    Я так понимаю что не получится для подкатегорий сделать единый шаблон?
    Нужно для каждой делать свой шаблон?

    stepan 2.2 года назад

    Зарегал файл taxonomy.php в нём вывожу свои подкатегории;

    скиньте код файла и укажите название файла, в котором выводите категории
    или сам файл

    ( за это я так понимаю отвечает файл single-product.php).

    это верно

    stepan 2.2 года назад

    Логика будет такая, если напримере записей:
    в файле
    category.php - будут выводиться И категории и ЗАПИСИ (можно вынести код в отдельные файлы, но логика их подключ все равно будет в category.php)

    WP для категорий и подкатегорий подключает ОДИН и тот же файл: category.php
    НО вы можете это изменить кодом: подключать другой файл, если эта категория содержит ПОДКАТЕГОРИИ и если у нее нет подкатегорий - то подключать третий файл.

    Надеюсь логику уловили.

    timbers 2.2 года назад

    вот файл taxonomy.php в нём вывод и подкатегорий и их записей

    <?php get_header() ?>
    
    <main class="main">
    	  <div class="breadcrums">
    		<div class="container">
    		  <ul class="breadcrums__list">
    
    			<li class="breadcrums__item">
    			  <a class="breadcrums__link" href="#">Home</a>
    			</li>
    
    			<li class="breadcrums__item">
    			  <a class="breadcrums__link" href="#">About</a>
    			</li>
    		  </ul>
    		</div>
    	  </div>
    
    	  <section class="new-collection">
    		<div class="container-fluid">
    
    		<?php
    			$taxonomy = 'category-product';
    			$term = get_queried_object();
    
    			$children = get_terms( 
    			  $term->taxonomy, array(
    				'parent' => $term->term_id,
    				'hide_empty' => false
    			  )
    			);
    			// print_r ($term);
    
    			foreach ($children as $subcat) :   
    
    ?>
    		  <div class="cont-wrapper">     
    		  <h3 class="new-collection__title">
    		  <?php echo $subcat -> name ?>
    			</h3>
    			<p class="new-collection__text">            
    			  <?php echo $subcat -> description ?>
    			</p>         
    
    			<div class="collection">
    			<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    			<a class="collection__item" href="#">
    					<?php the_post_thumbnail(
    				 'full',
    				   array(
    					 'class' => 'collection__images'
    					 ) 
    				  ); ?>
    				<div class="collection__info">
    				  <h6 class="collection__info-title">
    					<?php get_the_title(); ?>
    				  </h6>
    				  <p class="collection__info-text">
    				  <?php get_the_content(); ?>
    				  </p>
    				</div>
    			  </a>
    		  <?php endwhile; else: ?>
    				Записей нет.
    		  <?php endif; ?>
    		 </div>
    
    		 <?php endforeach; ?>
    
    		  <div class="pagination">
    			<a class="pagination__arrow pagination__arrow--disabled" href="#">
    			  <img class="pagination__arrow-icon" src="images/arrow-left.svg" alt="arrow">
    			</a>
    			<ul class="pagination__list">
    			  <li class="pagination__list-item">
    				<a class="pagination__list-num pagination__list-num--active" href="#">1</a>
    			  </li>
    			  <li class="pagination__list-item">
    				<a class="pagination__list-num" href="#">2</a>
    			  </li>
    			</ul>
    			<a class="pagination__arrow" href="#">
    			  <img class="pagination__arrow-icon" src="images/arrow-right.svg" alt="arrow">
    			</a>
    		  </div>
    		</div>
      </div>
      </section>
      </main>
    
    <?php get_footer() ?>
    timbers 2.2 года назад

    Сейчас записи вообще не выводятся, там появляется условие из цикла "Записей нет"

    timbers 2.2 года назад

    stepan 2.2 года назад

    и их записей

    нет там вывода записей категорий. Там вывод записей той категории, в которой сейчас находитесь да и еще в цикле категорий.

    stepan 2.2 года назад
    <?php get_header() ?>
    
    	<main class="main">
    		<div class="breadcrums">
    			<div class="container">
    				<ul class="breadcrums__list">
    
    					<li class="breadcrums__item">
    						<a class="breadcrums__link" href="#">Home</a>
    					</li>
    
    					<li class="breadcrums__item">
    						<a class="breadcrums__link" href="#">About</a>
    					</li>
    				</ul>
    			</div>
    		</div>
    
    		<section class="new-collection">
    			<div class="container-fluid">
    				<?php
    				$taxonomy = 'category-product';
    				$term     = get_queried_object();
    
    				$children = get_terms(
    					$term->taxonomy, array(
    						'parent'     => $term->term_id,
    						'hide_empty' => false
    					)
    				);
    				// print_r ($term);
    
    				if ( $children ) {
    					foreach ( $children as $subcat ) :
    						?>
    						<div class="cont-wrapper">
    							<h3 class="new-collection__title">
    								<?php echo $subcat->name ?>
    							</h3>
    							<p class="new-collection__text">
    								<?php echo $subcat->description ?>
    							</p>
    
    							<?php
    							$term_posts = get_posts( [
    								'post_type' => 'product',
    								'tax_query' => [
    									[
    										'taxonomy' => $taxonomy,
    										'terms'    => [ $subcat->term_id ]
    									]
    								]
    
    							] );
    							?>
    							<div class="collection">
    								<?php
    								if ( $term_posts ) {
    									foreach ( $term_posts as $post ) {
    										setup_postdata( $post ); ?>
    										<a class="collection__item" href="#">
    											<?php the_post_thumbnail(
    												'full',
    												array(
    													'class' => 'collection__images'
    												)
    											); ?>
    											<div class="collection__info">
    												<h6 class="collection__info-title">
    													<?php get_the_title(); ?>
    												</h6>
    												<p class="collection__info-text">
    													<?php get_the_content(); ?>
    												</p>
    											</div>
    										</a>
    <?php } wp_reset_postdata(); ?>
    								<?php } else { ?>
    									Записей нет в подкатегориях
    								<?php } ?>
    							</div>
    
    						</div>
    					<?php
    					endforeach;
    				}
    				else {
    					// ЕСЛИ НЕТ дочерн категорий - то выводим сразу записи
    					?>
    					<div class="collection">
    						<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    							<a class="collection__item" href="#">
    								<?php the_post_thumbnail(
    									'full',
    									array(
    										'class' => 'collection__images'
    									)
    								); ?>
    								<div class="collection__info">
    									<h6 class="collection__info-title">
    										<?php get_the_title(); ?>
    									</h6>
    									<p class="collection__info-text">
    										<?php get_the_content(); ?>
    									</p>
    								</div>
    							</a>
    						<?php endwhile; else: ?>
    							Записей нет.
    						<?php endif; ?>
    					</div>
    					<?php
    				}
    				?>
    			</div>
    		</section>
    	</main>
    
    <?php get_footer() ?>
    stepan 2.2 года назад

    код изменил - посмотрите, изучите.
    Если цикл дочерних категорий - в нем получаем записи.
    Если нет дочерних категорий - то сразу выводим записи.

    timbers 2.2 года назад

    оууууу, сейчас очень помогли, буду разбираться, большое спасибо, сделали мой день!
    и последний вопрос, get_permalink() прописал у ссылок, но перехода на страницу single-product.php нет, в чём может быть ошибка?

    stepan 2.2 года назад
    <?php echo get_permalink( $post ); ?>

    лучше так, сразу с $post И echo добавить нужно.

    А куда есть переход? какая ссылка формируется?

    timbers 2.2 года назад

    до вставки была: http://modern-expo/category-product/other-production/
    после стала :http://modern-expo/product/saner/

    timbers 2.2 года назад

    До этого страница просто обновлялась и всё

    stepan 2.2 года назад

    после стала :http://modern-expo/product/saner/

    это правильная ссылка на страницу продукта.

    timber 2.2 года назад

    Отлично, спасибо
    http://modern-expo/product/ - чтобы был переход на главную страницу, мне нужно сделать шаблон product.php в котором прописать переход на главную страницу, всё верно?
    И тоже самое если будет переход на http://modern-expo/category-product/

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