web-dev-qa-db-fra.com

Catégories et balises renvoyant 404 dans la barre latérale lors de l'utilisation de permaliens laids

J'utilise des permaliens "laids" et ils vont bien dans index.php et single.php. J'ai aussi un modèle appelé sidebar.php qui construit une barre latérale au niveau article/post. Lorsque je clique sur les catégories et les balises dans la barre latérale, je suis renvoyé avec un 404. Le format actuel est le suivant:

http: // localhost/mywebsite/tag/mytag

http: // localhost/mywebsite/category/mycategory

Contrairement à ce que j'attends des permaliens laids (et cela se voit dans index.php et single.php):

http: // localhost/mywebsite /? tag = 1

http: // localhost/mywebsite /? cat = 3

Mes tags sont définis comme ceci:

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;
}

Mon HTML/PHP est comme suit:

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>";
}

Où vais-je mal?

Je vous remercie

EDIT1:

Voici ma fonction getPosts de 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);
          }
      }
    }

EDIT2:

J'ai tenté ceci:

<div class='categories-container'>
                  <strong><a href='". home_url() ."/category/?cat=". $cat_ID."'>{$section}</a></strong>
                </div>

Mais sans succès, est-ce la bonne direction? Où dois-je effectuer la modification afin d'obtenir l'URL de catégorie au format "home_url/category /? Cat = 123"?

EDIT3:

Pas sûr que je me dirige dans la bonne direction, mais j'ai réussi à obtenir la bonne URL, mais il retourne un 404 (par opposition aux catégories au niveau de l'article/de la maison)

J'ai modifié la fonction getPosts afin que get_the_category soit mappé sur l'ID de cat_id plutôt que sur le slug (je ne suis pas sûr que ce soit la bonne approche):

 newSuggestion($post->post_title, get_the_category($post->ID)[0]->cat_ID, get_the_category($post->ID)[0]->name, $imageUrl,

alors ma fonction newSuggestion a:

  <div class='categories-container'>
                  <strong><a href='". home_url() ."/category/?cat=". $sectionSlug."'>{$section}</a></strong>
                </div>

Avez-vous une idée de la raison pour laquelle je frappe toujours un 404 alors que la même URL fonctionne dans d'autres parties du site (par exemple, home/index ou article)?

EDIT4:

J'ai enfin eu les catégories qui travaillent avec ça:

<div class='categories-container'>
                  <strong><a href='". get_term_link( $sectionSlug) . "'>{$section}</a></strong>
                </div>
1
paranza

Suite à la suggestion pour les balises, les catégories fonctionnent.

J'ai modifié la fonction getposts en mappant la catégorie sur le cat_ID plutôt que sur le slug:

newSuggestion($post->post_title, get_the_category($post->ID)[0]->cat_ID, get_the_category($post->ID)[0]->name, $imageUrl,

Ensuite, les fonctions NewSuggestion établissent les catégories de la manière suivante:

<div class='categories-container'>
                  <strong><a href='". get_term_link( $sectionSlug) . "'>{$section}</a></strong>
                </div>

L’approche fonctionne, toute suggestion ou recommandation sur la façon de l’améliorer est plus que bienvenue.

0
paranza

Au lieu de:

home_url() . "/tag/" . $i->slug

Utilisez get_term_link() function. Il renverra le lien pour le terme en fonction de la configuration actuelle:

// Assuming $i is a term object
get_term_link( $i->term_id )

Par exemple, votre fonction printTags() serait:

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
cybmeta