Категории и теги, возвращающие 404 на боковой панели при использовании уродливых постоянных ссылок
Я использую "уродливые" постоянные ссылки, и они хороши в index.php и single.php . У меня также есть шаблон под названием sidebar.php это создает боковую панель на уровне статьи/публикации. При нажатии на категории и теги на боковой панели я возвращаюсь с 404. Фактический формат:
Http://localhost/mywebsite/tag/mytag
Http://localhost/mywebsite/category/mycategory
В отличие от того, что я ожидаю от уродливого постоянные ссылки (и это отображается в index.php и single.php ):
Http://localhost/mywebsite/?tag=1
Http://localhost/mywebsite/?cat=3
Мои теги определяются следующим образом:
function printTags($tags){
if ($tags!=false) {
$return = '';
foreach ($tags as $i){
$return .= '<li><a href="' . home_url() . "/tag/" . $i->slug . '">' . $i->name . '</a></li>';
}
return $return;
}
}
function getTags($tagData){
$tagArray = [];
if($tagData!=false){
foreach ($tagData as $i){
array_push($tagArray, $i->name);
}
}
return $tagArray;
}
Мой HTML/PHP выглядит следующим образом:
function newSuggestion($itemTitle, $sectionSlug, $section, $image, $url, $tags){
echo "<li class='row class'>
<div class='col item'>
<div class='row img-container'>
<div class='col'>
<a href='{$url}'><img src='{$image}' alt='No Image'/></a>
</div>
</div>
<div class='row anotherclass'>
<div class='categories-container'>
<strong><a href='". home_url() ."/category/". $sectionSlug."'>{$section}</a></strong>
</div>
<div class='tags-container'>
<ul class='tags'>". printTags($tags) ."</ul>
</div>
</div>
<div class='row title-container'>
<h2 class='h3'><a href='{$url}'>{$itemTitle}</a></h2>
</div>
</div>
</li>";
}
Где я ошибаюсь?
Спасибо
ПРАВКА1:
Вот моя функция getPosts из sidebar.php :
function getPosts($posts, $numSuggestion){
foreach ( $posts as $post ) {
if ($post->ID!=get_the_ID() && $GLOBALS['currentSuggestion']<$numSuggestion && !in_array($post->ID, $GLOBALS['$alreadySuggested'])){
$imageUrl = wp_get_attachment_url( get_post_thumbnail_id($post->ID));
if ($imageUrl == false){
$imageUrl = getDefaultImage();
}
newSuggestion($post->post_title, get_the_category($post->ID)[0]->slug, get_the_category($post->ID)[0]->name, $imageUrl, get_permalink($post->ID), get_the_tags($post->ID));
$GLOBALS['currentSuggestion']++;
array_push($GLOBALS['$alreadySuggested'], $post->ID);
}
}
}
ПРАВКА2:
Я пытался это сделать:
<div class='categories-container'>
<strong><a href='". home_url() ."/category/?cat=". $cat_ID."'>{$section}</a></strong>
</div>
Но без успеха, это правильное направление. Где я могу внести изменения, чтобы получить URL-адрес категорий в формате "home_url/категория/?cat=123"?
ПРАВКА3:
Не уверен, что я иду в правильном направлении, но мне удалось получить правильный URL-адрес, однако он возвращает 404 (в отличие от категорий на уровне статьи/дома)
Я изменил функцию getPosts так, чтобы get_the_category
отображался на cat_ID, а не на slug (Я не уверен, что это правильный подход):
newSuggestion($post->post_title, get_the_category($post->ID)[0]->cat_ID, get_the_category($post->ID)[0]->name, $imageUrl,
Тогда моя функция подачи новостей имеет:
<div class='categories-container'>
<strong><a href='". home_url() ."/category/?cat=". $sectionSlug."'>{$section}</a></strong>
</div>
Есть идеи, почему я все еще нажимаю 404, в то время как тот же URL-адрес функционирует в других частях сайта (например, главная страница/индекс или статья)?
ПРАВКА4:
Я наконец-то получил категории, работающие с этим:
<div class='categories-container'>
<strong><a href='". get_term_link( $sectionSlug) . "'>{$section}</a></strong>
</div>
2 answers
Вместо:
home_url() . "/tag/" . $i->slug
Использовать get_term_link()
функция. Он вернет ссылку на термин в соответствии с текущей конфигурацией:
// Assuming $i is a term object
get_term_link( $i->term_id )
Например, ваша функция printTags()
будет такой:
function printTags($tags){
//Check to see if tags are provided
if ($tags!=false) {
$return = '';
foreach ($tags as $i){
$return .= '<li><a href="' . get_term_link( $i->term_id ) . '">' . $i->name . '</a></li>';
}
return $return;
}
}
Следуя предложению о тегах, я заставил категории работать.
Я изменил функцию getposts, сопоставив категорию с идентификатором cat_ID, а не слагом:
newSuggestion($post->post_title, get_the_category($post->ID)[0]->cat_ID, get_the_category($post->ID)[0]->name, $imageUrl,
Затем функции передачи новостей распределяют категории следующим образом:
<div class='categories-container'>
<strong><a href='". get_term_link( $sectionSlug) . "'>{$section}</a></strong>
</div>
Подход работает, любые предложения или рекомендации о том, как его улучшить, более чем приветствуются.