Создайте отдельный шаблон для общей пользовательской таксономии с общими терминами


enter image description here Я создал пользовательскую таксономию под названием "product_category", она была разделена с типом сообщений "книги" и "фильмы".

Поэтому мне нужно создать другой шаблон для обоих типов сообщений.

Дизайн обоих шаблонов будет отличаться, поэтому важно, чтобы обе общие таксономии post_type (даже их термины будут общими в обоих типах post_type.) должны иметь разные шаблоны.

Путь должен быть похож :-

Сайт/книги/категория товаров/ужасы/

Сайт/фильмы/категория товаров/ужасы/

Author: Community, 2014-06-29

1 answers

Видите ли, довольно сложно иметь такой путь, как

Сайт/книги/категория товаров/ужасы/

Сайт/фильмы/категория товаров/ужасы/

Поскольку функциональность wordpress будет конфликтовать между custom_post_type и их таксономией, если вы попытаетесь сохранить URL, как вы упомянули. Я предлагаю вам рассмотреть то, что я упомянул ниже, как решение вашей проблема.

Сайт/категория товаров/ужасы/?post_type=книги

Сайт/категория товаров/ужасы/?post_type=фильмы

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

  • common-term-books.php
  • common-term-movies.php

И используйте этот код для перенаправления на шаблон на основе пользовательского типа записи:

add_filter( 'template_include', 'wpse_152146_template_override', 99 );
function wpse_152146_template_override(){
    if (is_tax()) {
        if ( 'books' == $_GET['post_type']) {

            $new_template = locate_template( array( 'common-term-books.php' ) );
            if ( '' != $new_template ) {
                return $new_template ;
            }

        }
        elseif ( 'movies' == $_GET['post_type']) {

            $new_template = locate_template( array( 'common-term-movies.php' ) );
            if ( '' != $new_template ) {
                return $new_template ;
            }

        }
        else
            return $template;
    }
    else
        return $template;
}

Кроме того, вы также можете использовать созданную мной функцию custom_term_link для получения URL-адреса на основе post_type

function get_custom_term_link( $term, $taxonomy, $post_type ){
    $link = get_term_link( $term, $taxonomy );
    return $link.'?post_type='.$post_type;
}

get_custom_term_link( 'horror', 'product_category', 'books');

Не забудьте создать файл шаблона common-term-books.php & common-term-movies.php. В противном случае он просто покажет пустой белый экран.

 1
Author: Abhineet Verma, 2020-06-15 08:21:38