Как получить WordPress Wesitelogo

#javascript #graphql #gatsby #gatsby-image #gatsby-plugin

#javascript #graphql #гэтсби #gatsby-изображение #gatsby-плагин

Вопрос:

Я новичок в Gatsby. Итак, я хотел бы, чтобы логотип моего сайта был определен в администрации WordPress. Вот как я это сделал:

 `import React from 'react';
import {graphql, StaticQuery} from 'gatsby';
import styled from 'styled-components';
import  Img  from  'gatsby-image';

    const SiteInfo = () => (
        <StaticQuery query={graphql`
        {
            file(name: {eq: "logo"}) {
                relativePath
                childImageSharp {
                  fluid {
                    originalImg
                  }
                }
            }
            site {
                siteMetadata {
                  title
                }
            }
        
        allFile(filter: {name: {eq: "logo"}}) {
            edges {
              node {
                name
                url
                relativePath
              }
            }
        }
        
        allWordpressWpMedia(filter: {title: {eq: "logo"}}) {
            edges {
              node {
                title
                source_url
              }
            }
          }
    }
      
      
    `
    } render = {data => (
        <BasicInfoWrapper>
            <Sitelogo>
                <Img src={data.allWordpressWpMedia.edges.node.source_url} alt="Logo" />
            </Sitelogo>
            <SiteTitle>
                {/*data.site.siteMetadata?.title || `Title`*/}
            </SiteTitle>

        </BasicInfoWrapper>
    )}/>
    );
    export default SiteInfo;
 

`

к сожалению, это не работает, и я получаю следующую ошибку: TypeError:

 `can't access property "source_url", data.allWordpressWpMedia.edges.node is undefined`
 

Итак, я обращаюсь к вам, чтобы я мог добиться успеха в этом

Спасибо!

Комментарии:

1. Вы тестировали свой запрос в GraphQL playground ( localhost:8000/___graphql )?

2. Да, это работает очень хорошо. Вот результаты: { «data»: { «allWordpressWpMedia»: { «edge»: [ { «node»: { «title»: «logo», «source_url»: » localhost/hellopomelo/wp-content/uploads/2020/11/ логотип.png » } } ] } }, «расширения»: {} }

Ответ №1:

Вам нужно ввести позицию вложенного edges , поскольку это массив.

  <Img src={data.allWordpressWpMedia.edges[0].node.source_url} alt="Logo" />
 

Однако это не сработает для отображения изображения с помощью gatsby-image . Вы должны использовать собственный img тег:

  <img src={data.allWordpressWpMedia.edges[0].node.source_url} alt="Logo" />
 

Если вы хотите использовать gatsby-image , вам нужно получить некоторые дополнительные данные, используя фрагменты или необработанные поля. Идеальный запрос gatsby-image должен выглядеть так:

   query {
    file(relativePath: { eq: "blog/avatars/kyle-mathews.jpeg" }) {
      childImageSharp {
        fixed(width: 125, height: 125) {
          ...GatsbyImageSharpFixed
        }
      }
    }
  }
 

Затем вы сможете:

 export default ({ data }) => (
  <div>
    <h1>Hello gatsby-image</h1>
    <Img fixed={data.file.childImageSharp.fixed} />
  </div>
)
 

Подводя итог, вы не можете просто использовать src attribute, потому что Gatsby необходимо проанализировать изображение с помощью transformers и sharps для обработки изображения и создания схем узлов GraphQL.

Вам нужно преобразовать ваш запрос во что-то вроде:

 const allMedia = graphql`
  query {
    allWordpressWpMedia {
      edges {
        node {
          source_url
          localFile {
            publicURL
            childImageSharp {
              fluid(maxWidth: 800) {
                ...GatsbyImageSharpFluid
              }
            }
          }
        }
      }
    }
  }
`;
 

Для получения дополнительной информации взгляните на эту статью.

Комментарии:

1. оооооо Здорово! спасибо, спасибо вам очень mutch..it работайте с первым методом.