get_the_tag_list () возвращает неверные ссылки

Я создал настраиваемый тип сообщения с именем «портфолио» и присвоил ему стандартную «пост_таг» таксономии.

В шаблоне single-portfolio.php я использую следующий код для просмотра тегов каждого сообщения:

echo get_the_tag_list('<p class="tag_list"><strong>Tags: </strong>',', ','</p>'); 

Проблема в том, что ссылка каждого тега неверна и, наконец, перенаправляется на страницу 404. Ссылка, возвращающая get_the_tag_list() выглядит так:

http://www.mywebsite.com/?tag=web-design

но для правильной работы это должно быть что-то вроде:

http://www.mywebsite.com/?tag=web-design&post_type=portfolio

Любые предложения о том, как исправить это?

Примечание. Я также попробовал функцию get_the_term_list (), но он работает одинаково …

Solutions Collecting From Web of "get_the_tag_list () возвращает неверные ссылки"

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

Чтобы это сработало, вам нужно добавить свой собственный тип сообщения в основной запрос перед его выполнением. Для этого вам нужно будет использовать pre_get_posts . Если вы просто хотите настроить таргетинг на страницу архива тегов, вы можете использовать условный тег is_tag()

Следующий код в ваших функциях.php будет работать

 function custom_post_type_tags( $query ) { if ( !is_admin() && $query->is_tag() && $query->is_main_query() ) { $query->set( 'post_type', array( 'post', 'portfolio' ) ); } } add_action( 'pre_get_posts', 'custom_post_type_tags' ); 

РЕДАКТИРОВАТЬ

Если вам нужно отобразить свой собственный тип сообщения во всех шаблонах, вы можете просто удалить is_tag()

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