get_category_link () для персонализированного типа сообщения не включает пользовательскую переустановку slug?

Я получаю список категорий для project пользовательского типа сообщений с использованием get_categories($args) со следующими аргументами:

 $args = array( 'type'=> 'project', 'orderby'=> 'name', 'order'=> 'ASC', 'hide_empty'=> 1, 'hierarchical'=> 1, 'exclude'=> '', 'include'=> '', 'number'=> '', 'taxonomy'=> 'category', 'pad_counts'=> false ); 

Затем я повторяю через категории и свяжусь с архивом со следующим кодом:

<li><a href="<?=get_category_link( $category->term_id ); ?>" title="<?php sprintf( __( "View all posts in %s" ), $category->name ); ?>"><?=$category->name?></a></li>

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

http://domain.com/category/example_cat

что приводит к 404, а не к:

http://domain.com/projects/category/example_cat

Я знаю, что могу сделать str_replace() но кажется, что должен быть правильный способ сделать это, кто-нибудь знает, как обеспечить правильную сгенерировку ссылки категории с пользовательским типом сообщения?

EDIT: Я переписываю slug в объявлении пользовательского сообщения типа с помощью 'rewrite' => array('slug' => 'projects')

Solutions Collecting From Web of "get_category_link () для персонализированного типа сообщения не включает пользовательскую переустановку slug?"

URL-адреса вашей категории верны, они не будут меняться в силу того, что они связаны с настраиваемым типом сообщения. Я предполагаю, что проблема состоит в том, что запросы категории по умолчанию не включают никаких настраиваемых типов сообщений, поэтому отобразится «Ничего не найден» на страницах терминов, где единственными связанными сообщениями являются CPT. Чтобы исправить это, вам нужно изменить запросы категорий через pre_get_posts :

 function wpa_cpt_in_categories( $query ){ if ( ! is_admin() && $query->is_category() && $query->is_main_query() ) { $query->set( 'post_type', array( 'post', 'project' ) ); } } add_action( 'pre_get_posts', 'wpa_cpt_in_categories' );