Плагин карты сайта Gatsby - включать только определенные URL? - PullRequest
0 голосов
/ 17 января 2020

Я знаю, что могу исключить URL-адреса с массивом exclude в объекте options с gatsby-plugin-sitemap, но есть ли способ требовать, чтобы во всех URL-адресах была строка? В основном требуется, чтобы URL-адреса, добавленные в карту сайта, содержали либо en-us, либо es-us

 {
    resolve: `gatsby-plugin-sitemap`,
    options: {
      exclude: [`all urls must contain "en-us" or "es-us"`],
    },
  },

Спасибо!

ОБНОВЛЕНИЕ !! Благодаря @MarkoCen я был в состоянии заставить это работать. Я просто использовал регулярные выражения, чтобы добавить URL-адреса, которые я хотел в моей карте сайта. Вот код, если кому-то интересно. Обратите внимание, что мне пришлось вручную исключить /404 при таком подходе:

{
    resolve: `gatsby-plugin-sitemap`,
    options: {
      query: `
        {
          site {
            siteMetadata {
              siteUrl
            }
          }

          allSitePage {
            edges {
              node {
                path
              }
            }
          }
      }`,
      serialize: ({ site, allSitePage }) => {
        const links = [];
        for (let i = 0; i < allSitePage.edges.length; i++) {
          const { path } = allSitePage.edges[i].node;
          if (
            /products|404|unsupported|account/.test(path)
          ) {
            continue;
          } else if (/en-us|es-us/.test(path)) {
            links.push({
              url: site.siteMetadata.siteUrl + path,
              changefreq: 'daily',
              priority: 0.8,
            });
          }
        }
        return links;
      },
    },
  },

1 Ответ

2 голосов
/ 17 января 2020

вы можете создать карту сайта с нуля с опциями query и serialize

{
    resolve: `gatsby-plugin-sitemap`,
    options: {
      output: `/sitemap.xml`,

      // use this query to fetch all the data needed for sitemap links
      query: `
        {
          site {
            siteMetadata {
            siteUrl
          }
          blogs {
            title
          }
          ...
        }
      `,
      serialize: ({ site, blogs }) => {
        const links = [];
        blogs.forEach(blog => {
          // add link with en-us prefix
          links.push({
            url: `${site.siteMetadata.siteUrl}/en-us/blog/${blog.title}`,
            changefreq: 'daily',
            priority: 0.8,
          });
          // add link with es-us prefix
          links.push({
            url: `${site.siteMetadata.siteUrl}/es-us/blog/${blog.title}`
            changefreq: 'daily',
            priority: 0.8,          
          });
        })

        // plugin will use returned links to generate sitemap, so only include the links you want to show!
        return links;
      }
    },
},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...