1

I have another question in the project I'm doing, using NextJS to create a site with a blog part in Wordpress, through WPGraphQL, and I need support in a specific part. Let's go...

I managed to pull the highlighted image with almost no problems, I broke my head a bit, but it worked. The result that's functioning is the post excerpt, the code and the query were as follows (in time: image merely to test, it was the first idea that came to my mind, the site is not about Pokemon):

Image with working image in the excerpt, codes below

NextJS code:

import { LastPosts, PostContainer } from "./Styled";

const RecentBlogPosts = ({lastPosts}) => {
  const posts = lastPosts;

  return (
    <LastPosts>
        <h1> ÚLTIMAS POSTAGENS </h1>
          {posts?.map((post) => {
            return (
              <PostContainer key={post.slug}>
                <img src={post.featuredImage?.node.sourceUrl} alt="" />
                <Link href={`/post/${post.slug}`}>
                  <a>
                    <h3> { post.title } </h3>
                    <div dangerouslySetInnerHTML={{ __html: post.excerpt }} />
                    <button> Saiba mais </button>
                  </a>
                </Link>
              </PostContainer>
            )
          })}
    </LastPosts>
  )
};

export default RecentBlogPosts;

Query for this part:

export const RECENT_POSTS = `query RecentPosts {
  posts(where: {orderby: {field: DATE, order: DESC}}, first: 2) {
    nodes {
      id
      slug
      title
      excerpt
      featuredImage {
        node {
          sourceUrl
        }
      }
    }
  }
}`;

But I tried to pull the same image in the full blogpsot and it wasn't working... It appears when I view the post from the generic WordPress admin template, but not at my NextJS site, which i See through localhost:3000/post/[here would be the post title in slug] that I'm using. The rest is normal, text with all fonts and specifications with styled components, as well as tags, they work without any problem. The following is the same schema: image with result, code and query that I am using, this time for the part where I'm having problems:

Image with blogpost not working, codes below

NextJS code:

import fetcher from "../../lib/fetcher";
import { GET_ALL_POSTS_WITH_SLUG, POST_BY_SLUG } from "../../lib/wordpress/api";
import { useRouter } from "next/router";
import { Reset } from "../../constants/StyledConstants";
import Header from "../../components/Header/Header";
import { BlogArticle, BlogPostContent, TagLinks, TagWrapper } from "./StyledPost";
import Footer from "../../components/Footer/Footer";

const post = ({ postData }) => {
  const blogPost = postData.data.post;
  console.log(postData);
  const tags = postData.data.post.tags.nodes;
  const router = useRouter;

  if(!router.isFallback && !blogPost?.slug) {
    return <div>erro</div>
  }

  return (
    <>
      <Reset />
      <Header />
      <BlogPostContent>
        {router.isFallback ? (
          <div> Carregando...... </div>
        ) : (
          <div>
            <h1> { blogPost.title } </h1>
            <img src={post.featuredImage?.node.sourceUrl} alt="imagem não aparece" />
            <BlogArticle dangerouslySetInnerHTML={{ __html: blogPost.content }} />
            <TagWrapper>
              {tags.map((tag) => <TagLinks href={`/tags/${tag.slug}`} key={tag.slug}> { tag.name } </TagLinks>)}
            </TagWrapper>
          </div>
        )}
      </BlogPostContent>
      <Footer />
    </>
  )
}

export default post;

export async function getStaticPaths() {
  const response = await fetcher(GET_ALL_POSTS_WITH_SLUG);
  const allposts = await response.data.posts.nodes;

  return {
    paths: allposts.map((post) => `/post/${post.slug}`) || [],
    fallback: false
  };
}

export async function getStaticProps({ params }) {
  const variables = {
    id: params.slug,
    idType: "SLUG"
  };

  const data = await fetcher(POST_BY_SLUG, { variables })

  return {
    props: {
      postData: data
    },
  };
}

Query being used:

export const POST_BY_SLUG = `query PostBySlug($id: ID!, $idType: PostIdType!) {
  post(id: $id, idType: $idType) {
    title
    slug
    date
    content
    featuredImage {
      node {
        sourceUrl
      }
    }
    tags {
      nodes {
        name
        slug
      }
    }
  }
}`;

I tried to use {post.featuredImage?.node.sourceUrl} because, as far as I understand, following the same basis I did for the excerpt in the blogspot, it should work, but I guess I was wrong... I tried to think of other ways to do it to get to the image, without success... Could someone help to point out where I am wrong please? Thank you very much in advance!!

  • Please trim your code to make it easier to find your problem. Follow these guidelines to create a [minimal reproducible example](https://stackoverflow.com/help/minimal-reproducible-example). – Community May 20 '22 at 06:07
  • Is the `console.log(postData)` logging the expected output in your `Post` component? – juliomalves May 20 '22 at 22:48

0 Answers0