diff --git a/frontend/src/components/Pages/Post.jsx b/frontend/src/components/Pages/Post.jsx index 5fb8774..c769f5f 100644 --- a/frontend/src/components/Pages/Post.jsx +++ b/frontend/src/components/Pages/Post.jsx @@ -10,7 +10,7 @@ const Posts = () => { useEffect(() => { const fetchPosts = async () => { try { - const response = await api.get("wp/v2/posts?_fields=id,title,excerpt,content,featured_media"); + const response = await api.get("wp/v2/posts?_fields=id,slug,title,excerpt,content,featured_media"); const postsData = response.data; // Récupérer les images en vedette @@ -66,7 +66,7 @@ const Posts = () => { cursor: "pointer", "&:hover": { backgroundColor: "#0e467f", color: "white", transform: "scale(1.05)", boxShadow: 6 }, }} - onClick={() => navigate(`/post/${post.id}`)} + onClick={() => navigate(`/post/${post.slug}`)} > {post.image && ( diff --git a/frontend/src/components/PostDetails.jsx b/frontend/src/components/PostDetails.jsx index 700cf5c..d3e36e5 100644 --- a/frontend/src/components/PostDetails.jsx +++ b/frontend/src/components/PostDetails.jsx @@ -4,61 +4,81 @@ import { useParams, useNavigate } from "react-router-dom"; import api from "../api"; const PostDetails = () => { - const { id } = useParams(); + const { slug } = useParams(); // ✅ Utilisation correcte du slug const [post, setPost] = useState(null); const [image, setImage] = useState(null); const navigate = useNavigate(); useEffect(() => { const fetchPost = async () => { - try { - const response = await api.get(`wp/v2/posts/${id}?_fields=title,content,featured_media,date`); - setPost(response.data); + if (!slug) { + console.error("❌ Erreur : aucun slug fourni !"); + return; + } - // Récupération de l'image - if (response.data.featured_media) { - const mediaResponse = await api.get(`wp/v2/media/${response.data.featured_media}`); - setImage(mediaResponse.data.source_url); + try { + console.log(`📢 Requête API pour le slug : ${slug}`); + + // ✅ Requête API correcte + const response = await api.get(`wp/v2/posts?slug=${slug}&_fields=id,title,content,featured_media,date`); + + if (response.data.length > 0) { + const article = response.data[0]; // ✅ Récupération du premier article trouvé + setPost(article); + console.log("✅ Article trouvé :", article); + + // ✅ Récupération de l'image en vedette si elle existe + if (article.featured_media) { + console.log(`📢 Récupération de l'image ID : ${article.featured_media}`); + const mediaResponse = await api.get(`wp/v2/media/${article.featured_media}`); + setImage(mediaResponse.data.source_url); + } + } else { + console.error("❌ Aucun article trouvé avec ce slug !"); } } catch (error) { - console.error("Erreur lors de la récupération de l'article :", error); + console.error("❌ Erreur lors de la récupération de l'article :", error); } }; fetchPost(); - }, [id]); + }, [slug]); // ✅ Dépendance correcte if (!post) { return ; } return ( - - - + {/* ✅ Titre de l'article */} + {post.title.rendered} - - {image && ( - - )} - - - + {/* ✅ Image + Contenu */} + + {image && ( + + )} + ); diff --git a/frontend/src/main.jsx b/frontend/src/main.jsx index 418bf95..c8d1bbb 100644 --- a/frontend/src/main.jsx +++ b/frontend/src/main.jsx @@ -50,7 +50,7 @@ function YourApp() { } /> } /> } /> - } /> + } /> } /> } /> } />