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

  • Стоит задача вывод у текущего термина дочерних терминов в виде списка.
    Копирую код с wp-kama? но он не работает.

    function first_child_terms_list() {
    
    	$current_term = get_queried_object();
    
    	// Если текущая страница не страница термина - прерываем выполнение функции
    
    	// Если это термин не древовидной таксономии - прерываем выполнение функции
    
    	// Запрашиваем дочерние элементы верхнего уровня текущего термина
    	$terms = get_terms( [
    		'taxonomy'   => $current_term->taxonomy,
    		'parent'     => $current_term->term_id,
    		'hide_empty' => false,
    	] );
    
    	// Если возникла ошибка запроса или терминов нет - прерываем выполнение функции
    	if ( is_wp_error( $terms ) || ! $terms ) {
    		print_r( $current_term );
    	}
    
    	?>
    
    	<ul class="terms">
    	<?php foreach ( $terms as $term ): ?>
    
    		<li class="term">
    			<?php
    			printf(
    				'<a href="%s" class="term-link">%s</a>',
    				esc_url( get_term_link( $term ) ),
    				esc_html( $term->name )
    			)
    			?>
    		</li>
    
    	<?php endforeach; ?>
    	</ul>
    
    	<?php
    }

    По какой то причине у меня выводит либо пустоту, либо первое условие.
    Сам get_queried_object(); у меня выводит массив данных без taxonomy. Почему?
    Мне кажется проблема как раз в этом, но что бы я не пробовал инчего не помогает.

    Здесь регистрация произвольного типа записи и ее таксономии

    add_action('init', 'service');
    function service()
    {
      $labels = array(
        'name' => 'Услуги',
        'singular_name' => 'Услуга',
        'add_new' => 'Добавить услугу',
        'add_new_item' => 'Добавить новую усулгу',
        'edit_item' => 'Редактировать услугу',
        'new_item' => 'Новая услуга',
        'view_item' => 'Посмотреть усулугу',
        'search_items' => 'Найти услугу',
        'not_found' =>  'Услуг не найдено',
        'not_found_in_trash' => 'В корзине услуг не найдено',
        'parent_item_colon' => '',
        'menu_name' => 'Услуги'
      );
    
      $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'query_var' => true,
        'rewrite' => true,
        'capability_type' => 'page',
        'has_archive' => false,
        'hierarchical' => false,
        'menu_position' => 5,
        'supports' => array('title','editor','thumbnail', 'comments'),
    		'taxonomies' => array('services') 
      );
      register_post_type('services',$args);  
    }
    
    // Создаем новую таксономию для Услуг
    add_action( 'init', 'create_services_taxonomies', 0 );
    
    function create_services_taxonomies(){
      $labels = array(
        'name' => _x( 'Категории услуг', 'services' ),
        'singular_name' => _x( 'Категория услуги', 'services_1' ),
        'search_items' =>  __( 'Найти категорию услуг' ),
        'all_items' => __( 'Все категории услуг' ),
        'parent_item' => __( 'Родительская категория услуги' ),
        'parent_item_colon' => __( 'Родительская категория' ),
        'edit_item' => __( 'Родительская категория' ),
        'update_item' => __( 'Обновить катгорию' ),
        'add_new_item' => __( 'Добавить новую катгорию' ),
        'new_item_name' => __( 'Название новой категории услуг' ),
        'menu_name' => __( 'Категории услуг' ),
      );
    
      register_taxonomy('services', array('service'), array(
        'hierarchical' => true,
        'labels' => $labels,
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => array( 'slug' => 'services' ),
      ));
    
    }
    

    Категории выглядят так http://prntscr.com/rdq6co
    В чем проблема?Как ее исправить?Мучаюсь уже пару дней Спасибо

Просмотр 11 ответов — с 1 по 11 (всего 11)
  • 
    $current_term = get_queried_object();
    print_r( $current_term );
    

    скопируйте ответ.

    WP_Post Object ( [ID] => 3080 [post_author] => 1 [post_date] => 2020-03-09 08:52:02 [post_date_gmt] => 2020-03-09 05:52:02 [post_content] => [post_title] => Секционные гаражные ворота [post_excerpt] => [post_status] => publish [comment_status] => open [ping_status] => closed [post_password] => [post_name] => sekcionnye-garazhnye-vorota [to_ping] => [pinged] => [post_modified] => 2020-03-09 15:56:26 [post_modified_gmt] => 2020-03-09 12:56:26 [post_content_filtered] => [post_parent] => 0 [guid] => http://garantstroy/?post_type=services&p=3080 [menu_order] => 0 [post_type] => services [post_mime_type] => [comment_count] => 0 [filter] => raw )

    • Ответ изменён 2 года, 8 месяцев назад пользователем poylar.

    ну так у вас открывается запись типа services, разве сами не видите?

    и вообще — создавать тип записей и таксономию с одним и тем же именем плохая идея.

    Вижу,но ведь services это услуги и у них есть категории из скрина? Что мне тогда нужно сделать?

    ну исправить как минимум тип записи:

    
    register_post_type('service',$args);
    

    судя по логике кода именно так должен называться тип записи у вас.

    далее — в каком именно шаблоне вы свой вывод делаете?
    оно будет работать только при выводе страницы таксономии.

    
    // Если текущая страница не страница термина - прерываем выполнение функции
    

    там код должен быть, который вы видимо удалили.
    а смысл в том, что не на странице термина код работать не будет — потому и прерывание было встроено.

    Я поменял название таксономии как вы и советовали. Надеюсь я правильно все сделал.

    add_action('init', 'services');
    function services()
    {
      $labels = array(
        'name' => 'Услуги',
        'singular_name' => 'Услуга',
        'add_new' => 'Добавить услугу',
        'add_new_item' => 'Добавить новую усулгу',
        'edit_item' => 'Редактировать услугу',
        'new_item' => 'Новая услуга',
        'view_item' => 'Посмотреть усулугу',
        'search_items' => 'Найти услугу',
        'not_found' =>  'Услуг не найдено',
        'not_found_in_trash' => 'В корзине услуг не найдено',
        'parent_item_colon' => '',
        'menu_name' => 'Услуги'
      );
    
      $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'query_var' => true,
        'rewrite' => true,
        'capability_type' => 'page',
        'has_archive' => true,
        'hierarchical' => true,
        'menu_position' => 5,
        'supports' => array('title','editor','thumbnail', 'comments'),
    		'taxonomies' => array('services_tax') 
      );
      register_post_type('services',$args);  
    }
    
    // Создаем новую таксономию для Услуг
    add_action( 'init', 'services_tax', 0 );
    
    function services_tax(){
      $labels = array(
        'name' => _x( 'Категории услуг', 'tax' ),
        'singular_name' => _x( 'Категория услуги', 'taxonomy singular name' ),
        'search_items' =>  __( 'Найти категорию услуг' ),
        'all_items' => __( 'Все категории услуг' ),
        'parent_item' => __( 'Родительская категория услуги' ),
        'parent_item_colon' => __( 'Родительская категория' ),
        'edit_item' => __( 'Родительская категория' ),
        'update_item' => __( 'Обновить катгорию' ),
        'add_new_item' => __( 'Добавить новую катгорию' ),
        'new_item_name' => __( 'Название новой категории услуг' ),
        'menu_name' => __( 'Категории услуг' ),
      );
    
      register_taxonomy('services_tax', array('services'), array(
        'hierarchical' => true,
        'labels' => $labels,
        'show_ui' => true,
        'query_var' => true,
        
      ));
    
    }
    

    Как понять в каком шаблоне? Я создал страницу single-services.php , и вызываю из него функцию. Все это кастомный тип записей

    Код который я удалил выглядел так, я сделал это для теста

    	// Если текущая страница не страница термина - прерываем выполнение функции
    	if ( ! ( is_a( $current_term, 'WP_Term' ) ) ) {
    		return;
    	}
    
    	// Если это термин не древовидной таксономии - прерываем выполнение функции
    	if ( ! is_taxonomy_hierarchical( $current_term->taxonomy ) ) {
    		return;
    	}

    И при наличии любого из этих условий у меня прерывается выополнение, хотя таксономия древовидная

    Как понять в каком шаблоне? Я создал страницу single-services.php

    single-services.php — это и есть шаблон, шаблон вывод одиночной записи типа services. А Вы пытаетесь действовать так, будто это страница терма ($current_term = get_queried_object();). Терм — не запись.

    А что в таком случае нужно делать?
    У меня есть список услуг (кастомные записи), которые я вывожу на главной странице и на странице всех услуг через обычный цикл foreach, у некоторых из этих услуг есть под услуги.
    И я хотел задавать условие, что если у усулги есть подуслуги, то выводить список подуслуг, а если нет, то выводить контент этой услуги.И все это на странице single-services.php.
    Чтобы не плодить много страниц-шаблонов.
    Как мне быть, подскажите, пожалуйста?

    И все это на странице single-services.php.

    Для начала разобраться что такое термы и что такое записи, а также что такое шаблоны и как они используются движком. А страницы тут вообще никаким боком.

Просмотр 11 ответов — с 1 по 11 (всего 11)
  • Тема «Вопрос по выводу текущей категории» закрыта для новых ответов.