使用Gatsby更快的WordPress网站
谈论最新的尖端网络技术,你会发现一些令人印象深刻的名字,如 React.js、Vue.js、Next.js 等等。 他们开辟了新的门户和方法来构建可以快速为用户提供内容的网站。
Gatsby.js 是一种可以提高网站整体速度和加载时间的框架。
快速网站的目标
快速加载的网站为开发人员带来以下好处和好处:
- 流量和参与度:您可以在快速网站上吸引更多网站访问者,这意味着更高的投资回报率和用户参与度。
- 页面排名:快速网站获得更高的浏览器排名。
使用 Gatsby.js 和 WordPress 提高网站速度
Gatsby.js 是一个免费且开源的基于 React.js 的框架,可帮助开发人员构建网站和应用程序。 这是 JAMstack (JavaScript APIs Markup) 网站总体趋势的一部分,旨在提高网站的整体速度和加载时间。
但 Gatsby 与 WordPress(当今最广泛使用的 CMS 选项之一)在哪里匹配? 尽管它的可用性和强大的社区,WordPress 可能对构建现代前端构成挑战,原因如下:
- 更新和变化:WordPress 会定期更新,但与其他快速变化的前端技术相比仍然缺乏同等水平。 与这些技术保持同步为开发人员增加了额外的负担。
- 持续集成和部署:目前,WordPress 生态系统中几乎没有持续集成/部署 (CI/CD) 选项。
- 集成成本:将一些最新的前端技术与 WordPress 应用程序集成可能具有挑战性。
使用 Gatsby 可以解决其中的一些限制。 在以下步骤中,我们将向您展示如何将 Gatsby 与 WordPress 集成以充分利用两者。 首先,我们将配置一个基本的 Gatsby 项目设置。 然后,我们将使用它从我们的 WordPress 站点获取数据。
将 Gatsby.js 与 WordPress 集成
首先,我们将建立一个演示 Gatsby 项目。
通过在终端中键入以下命令来安装 Gatsby CLI:
npm install -g gatsby-cli
接下来,使用以下命令创建一个新的 Gatsby 站点:
gatsby new site-name
要访问您的站点文件夹内容,请键入以下内容:
cd site-name
最后,启动开发服务器以开始构建您的站点:
gatsby develop
安装 gatsby-source-wordpress 插件
假设您已经建立了一个 WordPress 站点,并且您希望使用 Gatsby.js 构建一个前端,您需要做的就是将现有站点数据拉入静态 Gatsby 站点。 您可以使用 gatsby-source-wordpress 插件来做到这一点。
本教程使用默认的 WordPress REST API 站点,但如果您有一个预先存在的 WordPress 设置,您可以自由使用。
在您的终端中,键入以下内容以安装此插件:
npm install gatsby-source-wordpress
配置插件
在您的 gatsby-config.js 文件(主要 Gatsby 配置文件)中,您将添加一些 WordPress 特定的配置选项。 其中包括您的 WordPress 站点的 baseUrl、首选 HTTP protocol 以及与 高级自定义字段 (ACF) 插件 相关的设置。 includedRoutes 字段指定我们要获取的数据。
使用上述步骤中的演示 WordPress 站点,当前前端如下所示:
出于本教程的目的,将以下代码添加到名为 gatsby-config.js 的文件中:
module.exports = {
// ...
plugins: [
// ...
{
resolve: `gatsby-source-wordpress`,
options: {
// Your WordPress source.
baseUrl: `demo.wp-api.org`,
protocol: `https`,
// Only fetches posts, tags and categories from the baseUrl.
includedRoutes: ['**/posts', '**/tags', '**/categories'],
// Not using ACF so putting it off.
useACF: false
}
},
],
}
使用获取的 WordPress 数据
一旦您的 Gatsby 站点从您的 WordPress 源 URL 获取数据,就该创建您的站点页面了。 这是通过在 gatsby-node.js 文件中实现 createPages API 来完成的,这使得获取的数据可用于来自 GraphQL 的查询。 在构建时,gatsby-source-wordpress 插件会获取您的数据,并使用它来“自动推断 GraphQL 模式”,您可以对其进行查询。
将以下代码添加到名为 gatsby-node.js 的文件中:
/**
* Implement Gatsby's Node APIs in this file.
*
* See: https://www.gatsbyjs.org/docs/node-apis/
*/
// You can delete this file if you're not using it
const path = require(`path`);
const slash = require(`slash`);
/** STEP #1: Implement the Gatsby API “createPages”. This is
* called after the Gatsby bootstrap is finished so you have
* access to any information necessary to programmatically
* create pages.
* Will create pages for WordPress pages (route : /{slug})
* Will create pages for WordPress posts (route : /post/{slug})
*/
exports.createPages = async ({ graphql, actions }) => {
const { createPage } = actions;
// STEP #2: Query all WordPress Posts Data.
/** The “graphql” function allows us to run arbitrary
* queries against the local Gatsby GraphQL schema. Think of
* it like the site has a built-in database constructed
* from the fetched data that you can run queries against.
*/
const result = await graphql(`
{
allWordpressPost {
edges {
node {
id
slug
status
template
format
}
}
}
}
`);
// Check for any errors
if (result.errors) {
throw new Error(result.errors);
}
// Access query results via object destructuring.
const { allWordpressPost } = result.data;
const postTemplate = path.resolve(`./src/templates/post.js`);
// STEP #3: Create pages in Gatsby with WordPress Posts Data.
/**
* We want to create a detailed page for each
* post node. We'll just use the WordPress Slug for the slug.
* The Post ID is prefixed with 'POST_'
*/
allWordpressPost.edges.forEach(edge => {
createPage({
path: `/${edge.node.slug}/`,
component: slash(postTemplate),
context: {
id: edge.node.id
}
});
});
};
这将遍历现有的 WordPress 帖子数据。
步骤 #4:创建 post.js 模板
接下来,我们将为模板创建一个文件夹,您可以在其中为帖子、页面和布局添加文件。 现在,我们将创建一个 post.js 文件来从我们的 WordPress 站点获取帖子。
将以下代码添加到文件中:
import { graphql } from 'gatsby';
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import Layout from '../layouts';
class PostTemplate extends Component {
render() {
const post = this.props.data.wordpressPost;
// STEP #5: Use title and content in Gatsby.
return (
<Layout>
<h1 dangerouslySetInnerHTML={{ __html: post.title }} />
<div dangerouslySetInnerHTML={{ __html: post.content }} />
</Layout>
);
}
}
PostTemplate.propTypes = {
data: PropTypes.object.isRequired,
edges: PropTypes.array
};
export default PostTemplate;
// STEP #4: Get current WP Post data via ID.
export const pageQuery = graphql`
query($id: String!) {
wordpressPost(id: { eq: $id }) {
title
content
}
}
`;
检查最终结果
要启动开发服务器并查看最终结果,请在终端中键入以下命令:
npm start
您将获得可以在本地访问该站点的链接,以及其他详细信息,例如正在获取的 posts、categories 和 tags 的数量。
这是一个 GIF,演示了它的外观:
让我们看一下这个改进后的前端,它现在由 Gatsby.js 和 WordPress 后端提供支持:
您可以看到我们的应用程序如何仅从 WordPress 站点获取所需的数据。 这包括 posts、tags 和 categories。 要检索小部件或评论等其他类型的数据,您需要将适当的值添加到 includedRoutes 选项。
结论
通过学习本教程,您现在拥有与 Gatsby.js 前端集成的 WordPress 应用程序后端。 Gatsby 提供快速的网络体验,并带来额外的好处,可以增强您现有的 WordPress 网站。 您现在有了一个平台,可以进一步试验使用 Gatsby 为您的网站提供动力,