【问题标题】:WP GraphQL query only returns first 100 posts when generating sitemap生成站点地图时,WP GraphQL 查询仅返回前 100 个帖子
【发布时间】:2022-01-07 12:55:21
【问题描述】:

我正在创建一个动态站点地图,并尝试将所有博客文章纳入站点地图。 WP 中 GraphiQL IDE 中的 WP GraphQL Query 显示所有帖子,但在执行代码时,它只显示前 100 个。我可能忽略了一些东西,但不知道为什么会这样。

GraphQL 查询:

export const GET_POSTS = gql`
  query GET_POSTS {
    posts(first: 10000) {
      nodes {
        title
        uri
        modified
      }
    }
  }
`;

Sitemap.xml

const Sitemap = () => {};

export const getServerSideProps = async ({ res }) => {
  const baseUrl = {
    development: "http://localhost:3000",
    production: "https://PRODURL.com",
  }[process.env.NODE_ENV];

  const staticPages = fs
    .readdirSync(
      {
        development: "pages",
        production: "./",
      }[process.env.NODE_ENV],
    )
    .filter((staticPage) => {
      return ![
        "_app.tsx",
        "[[...slug]].tsx",
        "_error.tsx",
        "sitemap.xml.tsx",
      ].includes(staticPage);
    })
    .map((staticPagePath) => {
      return `${baseUrl}/${staticPagePath}`;
    });

  const { data } = await client.query({
    query: GET_PAGES_SITEMAP,
  });

  const blogPosts = await client.query({
    query: GET_POSTS,
  });

  const pages = data?.pages.nodes || [];
  const posts = blogPosts.data.posts.nodes || [];

  const sitemap = `<?xml version="1.0" encoding="UTF-8"?>
  <urlset 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" 
    xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" 
    xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" 
    xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" 
    xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0" 
    xmlns:pagemap="http://www.google.com/schemas/sitemap-pagemap/1.0" 
    xmlns:xhtml="http://www.w3.org/1999/xhtml" 
    xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
      ${staticPages
        .map((url) => {
          const date = new Date();
          const dateFormatter = Intl.DateTimeFormat("sv-SE");
          return `
            <url>
              <loc>${url}</loc>
              <lastmod>${dateFormatter.format(date)}</lastmod>
              <changefreq>monthly</changefreq>
              <priority>1.0</priority>
            </url>
          `;
        })
        .join("")}
      ${pages
        .map(({ uri, modified }) => {
          const date = new Date(modified);
          const dateFormatter = Intl.DateTimeFormat("sv-SE");

          return `
              <url>
                <loc>${baseUrl}${uri}</loc>
                <lastmod>${dateFormatter.format(date)}</lastmod>
                <changefreq>weekly</changefreq>
                <priority>1.0</priority>
              </url>
            `;
        })
        .join("")}
        ${posts
          .map(({ uri, modified }) => {
            const date = new Date(modified);
            const dateFormatter = Intl.DateTimeFormat("sv-SE");

            return `
              <url>
                <loc>${baseUrl}/blog${uri}</loc>
                <lastmod>${dateFormatter.format(date)}</lastmod>
                <changefreq>weekly</changefreq>
                <priority>1.0</priority>
              </url>
            `;
          })
          .join("")}
    </urlset>
  `;

  res.setHeader("Content-Type", "text/xml");
  res.write(sitemap);
  res.end();

  return {
    props: {},
  };
};

export default Sitemap;

【问题讨论】:

  • 默认情况下,WPGraphQL返回的每页最大帖子数为100。见graphql_connection_max_query_amount filter
  • 循环运行分页查询
  • 谢谢@juliomalves 这就是问题所在。我最终扩展了一点以允许所有帖子。谢谢!

标签: reactjs graphql next.js wp-graphql


【解决方案1】:

默认情况下,WPGraphQL 返回的每页最大帖子数为 100。您可以通过增加 graphql_connection_max_query_amount 值来覆盖它。

来自graphql_connection_max_query_amount 过滤器文档:

过滤每页应查询的最大帖子数。 默认值为 100 以防止查询成为过多的资源 密集的,但是个别系统可以覆盖它为他们的 具体需求。这个过滤器是故意应用的之后 query_args 过滤器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-23
    • 2019-06-24
    • 2021-03-20
    • 2016-03-27
    • 2017-11-29
    • 2010-09-05
    • 2015-08-11
    • 2020-08-14
    相关资源
    最近更新 更多