Как создать шаблон для пользовательской таксономии в WordPress?

15 авг. 2012 г., 13:00:24
Просмотры: 94K
Голосов: 10

У меня есть следующий код, который я использовал для создания пользовательского типа записи и пользовательской таксономии.

В разделе продуктов я создал категории "мониторы" и "расходные материалы".

Затем я создал шаблон taxonomy-monitors.php - правильно ли он назван для категории мониторов? И какой URL мне нужно посетить, чтобы увидеть только категорию мониторов с использованием этого шаблона?

add_action( 'init', 'create_post_type' );
function create_post_type() {
    register_post_type( 'products',
        array(
            'labels' => array(
                'name' => __( 'Продукты' ),
                'singular_name' => __( 'Продукт' )
            ),
        'capability_type' => 'post',
        'supports' => array('title','editor','comments'),   
        'public' => true,
        'has_archive' => true,
        'rewrite' => array( 'slug' => 'products' ),
        )
    );
}

function news_init() {
    // Создаем новую таксономию
    register_taxonomy(
        'products',
        'products',
        array(
            'label' => __( 'Категории продуктов' ),
            'sort' => true,
            'hierarchical' => true,
            'args' => array( 'orderby' => 'term_order' ),
            'rewrite' => array( 'slug' => 'products-category' )
        )
    );      
}
add_action( 'init', 'news_init' );

ОБНОВЛЕНИЕ Скриншот интерфейса WordPress

0
Все ответы на вопрос 3
4
15

Шаблоны

Смотрите Иерархию шаблонов для более подробного объяснения того, как WordPress выбирает шаблон.

Для термина таксономии slug ('monitors' в вашем примере) в таксономии taxonomy (например, 'products') WordPress будет пытаться использовать следующие шаблоны (в таком порядке):

taxonomy-{taxonomy}-{slug}.php
taxonomy-{taxonomy}.php
taxonomy.php
archive.php
index.php

Для страницы термина таксономии 'monitors' WordPress будет использовать

taxonomy-products-monitors.php

если такой файл существует. Если его нет, то для этой таксономии он перейдет к

taxonomy-products.php

и так далее.

Постоянные ссылки

Следующий URL должен вести на страницу товаров 'monitors':

 www.example.com?products=monitors

Вы также указали перезапись URL, поэтому, если правила перезаписи были обновлены и нет конфликтов, следующий URL также должен работать:

 www.example.com/products-category/monitors
15 авг. 2012 г. 13:32:25
Комментарии

Хорошо, спасибо. У меня теперь есть шаблон taxonomy-products-monitors.php, я перешел в раздел постоянных ссылок и нажал сохранить (это сбрасывает их, верно?), затем перешел на страницу http://www.neurosignsurgical.com/v2/products-category/monitors, но она все еще показывает 404. Не могу понять, почему!

Rob Rob
15 авг. 2012 г. 14:20:25

Да, это сбрасывает их. Учтите, что термины без записей, вероятно, будут показывать "ничего не найдено". Если первая ссылка работает нормально, то это проблема с постоянными ссылками. Вам следует использовать этот плагин для диагностики. Шаблон не влияет на 404 ошибку.

Stephen Harris Stephen Harris
15 авг. 2012 г. 17:00:53

Я попробовал добавить новые продукты и отнести их к мониторам, первая ссылка выдала 404, как и вторая. Попробовал плагин (я обновлю вопрос скриншотом).

Rob Rob
15 авг. 2012 г. 17:17:22

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

Tom Auger Tom Auger
15 авг. 2012 г. 18:34:33
1

Ссылка: https://stackoverflow.com/questions/33888951/wordpress-custom-post-type-taxonomy-template

<?php 
get_header();

// Действие перед оберткой контента и сайдбара
do_action('genesis_before_content_sidebar_wrap'); ?>

<div id="content-sidebar-wrap">
<?php do_action('genesis_before_content'); ?>

    <div class="wrap">
        <main class="content"> 
            <?php
                // Получаем slug и название текущей таксономии
                $case_study_cat_slug = get_queried_object()->slug;
                $case_study_cat_name = get_queried_object()->name;
            ?>
                <h2><?php echo $case_study_cat_name; ?></h2>
            <?php
                // Аргументы для запроса записей типа "success_stories" с фильтрацией по таксономии
                $al_tax_post_args = array(
                    'post_type' => 'success_stories', // Название вашего типа записи
                    'posts_per_page' => 999,
                    'order' => 'ASC',
                    'tax_query' => array(
                        array(
                            'taxonomy' => 'success_stories_category',
                            'field' => 'slug',
                            'terms' => $case_study_cat_slug
                        )
                    )
                );
                $al_tax_post_qry = new WP_Query($al_tax_post_args);

                // Вывод записей
                if($al_tax_post_qry->have_posts()) :
                   while($al_tax_post_qry->have_posts()) :
                        $al_tax_post_qry->the_post();
                        echo '<div class="post-excerpt">'; 
            ?>
                        <h2 class="entry-title" itemprop="headline"><a href="<?php the_permalink(); ?>" class="entry-title-link"><?php  the_title(); ?></a></h2>
                        <div class="entry-content"> <?php echo excerpt(35);  ?> </div>

                        </div>
            <?php
                    endwhile;
                    endif;

            ?>
        </main>         

    </div>  
</div>          

<?php
// Действие после обертки контента и сайдбара
do_action('genesis_after_content_sidebar_wrap');
get_footer();
28 дек. 2018 г. 07:32:45
Комментарии

Пожалуйста, [отредактируйте] ваш ответ и добавьте объяснение: почему это может решить проблему?

fuxia fuxia
28 дек. 2018 г. 09:19:11
0

Для этого добавьте следующий код в файл functions.php (находится в папке темы):

add_action( 'init', 'create_cw_hierarchical_taxonomy', 0 );
// создаем пользовательскую таксономию
function create_cw_hierarchical_taxonomy() {
$labels = array(
'name' => _x( 'Темы', 'название таксономии' ),
'singular_name' => _x( 'Тема', 'название таксономии в единственном числе' ),
'search_items' => __( 'Искать Темы' ),
'all_items' => __( 'Все Темы' ),
'parent_item' => __( 'Родительская Тема' ),
'parent_item_colon' => __( 'Родительская Тема:' ),
'edit_item' => __( 'Редактировать Тему' ),
'update_item' => __( 'Обновить Тему' ),
'add_new_item' => __( 'Добавить новую Тему' ),
'new_item_name' => __( 'Название новой Темы' ),
'menu_name' => __( 'Темы' ),
);
// регистрируем таксономию
register_taxonomy('topics',array('post'), array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'topic' ),
));
}

Я нашел это здесь, а также узнал как создать Неиерархическую Таксономию https://www.wpblog.com/create-custom-taxonomies-in-wordpress/

10 авг. 2017 г. 10:13:09