WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Как вывести список кастомных записей по двум термам разных таксономий с уникальным описанием?

Здравствуйте, буду благодарен за совет, в WP новичек.

Есть каталог книг, создан кастомный тип записи Books
К этому типу записи прикреплено две таксономии:

  1. Жанр (janr): fiction, novel, romantic, etc.
  2. ФорматКниги (format): electronic, hardcopy

Получилось сделать следующие страницы:

site.com/books/bookname/ - страница конкретной книги
site.com/janr/fiction/ - архив список всех книг по определенному жанру (таксономии)
site.com/format/electronic/ - список всех книг определенного формата

Теперь нужно сделать, чтобы на странице любого жанра был дополнительный фильтр по формату книги,
с переходом на отдельную страницу, например:

site.com/janr/fiction/electronic/ - все книги жанра fiction и формата electronic
site.com/janr/fiction/hardcopy/ - все книги жанра fiction и формата  hardcopy

При этом, очень хочется, чтобы была возможность прикреплять к таким пересечениям свои уникальные описания, например:

site.com/janr/fiction/electronic/ - "Все книги жанра fiction в электронном формате"
site.com/janr/fiction/electronic/ - "Каталог книг жанра fiction"

На ум приходит только в ручную добавлять дочерние категории к таксономии janr.
Можно ли как-то решить эту проблему более элегантно? Спасибо

0
DmitryRil1
месяц назад
  • 1
    Andrew469 america-xix.ru

    https://wp-kama.ru/function/add_rewrite_rule

    add_action('init', 'do_rewrite');
    function do_rewrite(){
    	add_rewrite_rule( '^(janr)/([^/]*)/([^/]*)/?', 'index.php?janr=$matches[1]&filter=$matches[2]', 'top' );
    
    	add_filter( 'query_vars', function( $vars ){
    		$vars[] = 'filter';
    		return $vars;
    	} );
    }

    https://wp-kama.ru/hook/pre_get_posts
    Далее, изменяете запрос, добавляя в него значение переменной filter. ОБЯЗАТЕЛЬНО проверяйте, в какой именно запрос вносите изменения.

    Как сделать запрос постов произвольного типа, принадлежащих двум таксономиям, см. здесь https://wp-kama.ru/function/wp_query

    Затем создаёте копию файла taxonomy.php, переименовываете его в taxonomy-janr.php и в нем стандартным образом оформляете посты.

    И наконец - постоянную ссылку создаёте произвольной функцией, которую либо вызываете напрямую (если есть такая возможность и желание), либо прикрепляете к фильтру https://wp-kama.ru/hook/term_link

    DmitryRil1 месяц назад

    Большое спасибо, скажите, а как-то можно к таким пересечениям двух таксономий прикрепить уникальное поле с описанием для вывода его на странице конкретного пересечения двух филтров?

    Andrew месяц назад

    Можно всё. Добавляете к элементу "основной" таксономии (в описанном случае - janry) произвольные поля, в названии которых прячете слаги элементов другой таксономии, и вызываете в шаблоне.

    update_term_meta( $janry->term_id, $format->slug, 'текст текст текст' );
    
    echo get_term_meta( $janry->term_id, get_query_var('filter'), true );

    $janry->term_id и $format->slug заменяете на нужные значения

    Как добавить редактируемое поле на экран таксономии смотрите здесь https://wp-kama.ru/hook/taxonomy-_edit_form_fields

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