Категории и теги, возвращающие 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>
Author: paranza, 2017-02-23

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;
    }
}
 1
Author: cybmeta, 2017-02-25 11:58:03

Следуя предложению о тегах, я заставил категории работать.

Я изменил функцию 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>

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

 0
Author: paranza, 2017-02-25 14:55:56