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