当 Next.js 遇到 Wordpress 会发生什么?

news2024/11/28 4:47:07

Wordpress 作为一款小型的内容管理系统,受到很多站长的欢迎,特别是作为个人博客,丰富的插件和主题提供了更多的定制和自由度。

自从前后端分离的开发模式兴起之后,Wordpress 又被作为数据存储的后端服务提供接口给第三方的前端页面使用,得益于自身提供的 REST API 功能,在后台设置中可自行开启。还有开发者通过插件的形式进行了更多功能的拓展,开发了博客小程序、商城小程序、社区小程序等。

花生小店[1] —— 一款结合 Wordpress 开发的微信电商小程序 SAAS 平台;

WooCommerce 微信小程序[2] —— 结合 Wordpress 商城插件 WooCommerce 开发的商城类小程序

微慕小程序[3] —— 将 WordPress 网站快速转换为小程序,开源提供了 Wordpress 后台插件和小程序端代码。

Next.js + Wordpress

Next.js 作为新兴的以 React 为底层技术,用于构建现代的、高性能的 Web 应用程序的框架,并具有服务端渲染能力。于是 Next.js 与 Wordpress 的结合变得理所当然。

这就有了开源项目 nextjs-wordpress[4](https://github.com/gregrickaby/nextjs-wordpress ) ,该仓库就是利用 GraphQL 技术查询 Wordpress 端提供的数据并采用 Next.js 和 Tailwind CSS 来搭建和操作前端页面及样式。

以下是提供的站点案例:
It's headless WordPress! - https://nextjswp.com[5]

样式异常的简洁,但是优点在于优越的渲染性能,并给了测试结果:

2598403499cd586a986889440d7b654b.png

准备工作

假设你已经有了一个 Wordpress 站点,比如我的 前端开发笔记站点[6] (https://i-fanr.com) 就是采用 Wordpress 程序搭建而成。

如果你还没有,也可以利用集成安装环境工具 Wampserver64[7] 快速搭建一个本地的测试站点,这里假设你使用的电脑是 Windows 系统。安装好软件之后,相当于你本地有了一套 Apache + PHP + MySQL 的开发环境套装。

4049ee1d47ab176541669f5899e4a3a2.png

下载地址[8]

将下载好的 Wordpress 源码[9] 放到 Wampserver 软件的安装目录 wamp64\www\wordpress 位置,启动服务后,默认访问 80 端口,在浏览器打开访问地址:http://localhost/wordpress/

接下来,你还需要为你的 Wordpress 站点准备好安装下面这些插件:

  • Advanced Custom Fields[10] (free version is fine)

  • Next.js WordPress Plugin[11]

  • Next.js WordPress Theme[12]

  • WPGraphQL Yoast SEO[13]

  • WPGraphQL for Advanced Custom Fields[14]

  • WPGraphQL[15]

  • Yoast SEO[16]

211e2080967bef2d65c8a754357d0c9a.png

启动本地 Next.js App

克隆仓库代码到本地

git clone git@github.com:gregrickaby/nextjs-wordpress.git

安装包

npm i

配置环境变量

cp .env.example .env.local

修改文件中的变量

# WordPress GraphQL API URL. No trailing slash.
NEXT_PUBLIC_WORDPRESS_GRAPHQL_URL="http://localhost/wordpress/graphql"

# Preview Secret. Must match the constant in wp-config.php.
NEXTJS_PREVIEW_SECRET="preview"

# Revalidation Secret. Must match the constant in wp-config.php.
NEXTJS_REVALIDATION_SECRET="revalidate"

修改 next.config.js

/** @type {import('next').NextConfig} */
const nextConfig = {
  images: {
    domains: ['localhost'],
    remotePatterns: [
      {
        protocol: 'http',
        hostname: 'http://localhost/wordpress' // <-- Change to your WordPress site
      },
      {
        protocol: 'https',
        hostname: '**.gravatar.com'
      }
    ]
  }
}

module.exports = nextConfig

接下来确保 Wordpress 已经安装好并启用相关的插件和主题,然后修改配置文件 wp-config.php,添加以下全局常量定义

// The URL of your Next.js frontend. Include the trailing slash.
define( 'NEXTJS_FRONTEND_URL', 'http://localhost/wordpress' );

// Any random string. This must match the .env variable in the Next.js frontend.
define( 'NEXTJS_PREVIEW_SECRET', 'preview' );

// Any random string. This must match the .env variable in the Next.js frontend.
define( 'NEXTJS_REVALIDATION_SECRET', 'revalidate' );

本地开启服务

npm run dev

打开 http://localhost:3000[17] 进行预览

07cd79247f2fa55d572e20f61ff26301.png

参考资料

[1]

花生小店: https://www.97866.com

[2]

WooCommerce 微信小程序: https://www.qwqoffice.com/article-30.html

[3]

微慕小程序: https://www.minapper.com

[4]

nextjs-wordpress: https://github.com/gregrickaby/nextjs-wordpress

[5]

https://nextjswp.com: https://nextjswp.com/

[6]

前端开发笔记站点: https://i-fanr.com

[7]

Wampserver64: https://www.wampserver.com

[8]

下载地址: https://www.wampserver.com/en/download-wampserver-64bits

[9]

Wordpress 源码: https://cn.wordpress.org/download/source/

[10]

Advanced Custom Fields: https://wordpress.org/plugins/advanced-custom-fields/

[11]

Next.js WordPress Plugin: https://github.com/gregrickaby/nextjs-wordpress-plugin

[12]

Next.js WordPress Theme: https://github.com/gregrickaby/nextjs-wordpress-theme

[13]

WPGraphQL Yoast SEO: https://wordpress.org/plugins/add-wpgraphql-seo/

[14]

WPGraphQL for Advanced Custom Fields: https://www.wpgraphql.com/acf/

[15]

WPGraphQL: https://www.wpgraphql.com/

[16]

Yoast SEO: https://wordpress.org/plugins/wordpress-seo/

[17]

http://localhost:3000: http://localhost:3000/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1172653.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM类的声明周期

文章目录 版权声明生命周期概述加载阶段查看内存中的对象 连接阶段连接阶段之验证连接阶段之准备连接阶段之解析 初始化阶段练习题目一练习题目二练习题目三练习题目四 使用阶段卸载阶段总结 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明…

第四章 Python运算符与流程控制

系列文章目录 第一章 Python 基础知识 第二章 python 字符串处理 第三章 python 数据类型 第四章 python 运算符与流程控制 第五章 python 文件操作 第六章 python 函数 第七章 python 常用内建函数 第八章 python 类(面向对象编程) 第九章 python 异常处理 第十章 python 自定…

【Unity之UI编程】如何用UGUI搭建一个登录注册面板

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;UI_…

数据可视化:折线图

1.初看效果 &#xff08;1&#xff09;效果一 &#xff08;2&#xff09;数据来源 2.JSON数据格式 其实JSON数据在JAVA后期的学习过程中我已经是很了解了&#xff0c;基本上后端服务器和前端交互数据大多是采用JSON字符串的形式 &#xff08;1&#xff09;JSON的作用 &#…

【软件逆向】如何逆向Unity3D+il2cpp开发的安卓app【IDA Pro+il2CppDumper+DnSpy+AndroidKiller】

教程背景 课程作业要求使用反编译技术&#xff0c;在游戏中实现无碰撞。正常情况下碰撞后角色死亡&#xff0c;修改为直接穿过物体不死亡。 需要准备的软件 il2CppDumper。DnSpy。IDA Pro。AndroidKiller。 一、使用il2CppDumper导出程序集 将{my_game}.apk后缀修改为{my_…

AD9371 官方例程 NO-OS 主函数 headless 梳理

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 &#xff1a; AD9371 官方…

SpringCloudAlibaba - 项目完整搭建(Nacos + OpenFeign + Getway + Sentinel)

目录 一、SpringCloudAlibaba 项目完整搭建 1.1、初始化项目 1.1.1、创建工程 1.1.2、配置父工程的 pom.xml 1.1.3、创建子模块 1.2、user 微服务 1.2.1、配置 pom.xml 1.2.2、创建 application.yml 配置文件 1.2.3、创建启动类 1.2.4、测试 1.3、product 微服务 1…

LIME低亮度图像增强

LIME低亮度图像增强 main.cpp #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> #include <opencv2/imgproc/imgproc.hpp> #include "lime.h"int main() {cv::Mat img_in cv::imread("…

Hello AIGC类杂志实验

shadow 类杂志是我们从6月开始孵化的一个小型内容产品。目前还在不断迭代升级中~~ 今天和大家聊聊心得体会&#xff1a; 从2023-06-12发布第一期以来&#xff0c;我和小杜一起打磨了前面几期&#xff0c;逐步找到稳定的内容表达方式后&#xff0c;由小杜独立负责此类杂志的更新…

c语言从入门到实战——函数递归

函数递归 前言1. 递归是什么&#xff1f;2. 递归的限制条件3. 递归举例3.1 举例1&#xff1a;求n的阶乘3.1.1 分析和代码实现3.1.2 画图推演 3.2 举例2&#xff1a;3.2.1 分析和代码实现3.2.2 画图推演 4. 递归与迭代 前言 函数递归是指一个函数直接或间接地调用自身&#xff…

13 Linux 蜂鸣器

一、蜂鸣器驱动原理 常用蜂鸣器分两种&#xff0c;有源蜂鸣器和无源蜂鸣器。 它们俩的区别&#xff1a;有源蜂鸣器具有内置的振荡器和驱动电路&#xff0c;无源蜂鸣器没有&#xff1b;源蜂鸣器只需简单的数字信号来控制&#xff0c;无源蜂鸣器需要外部电路或微控制器来提供特定…

Spring和SpringMVC总结

一、Spring IoC(Inversion of Control)中文名称&#xff1a;控制反转&#xff08;对象的创建交给Spring管理&#xff09;。DI(dependency injection )依赖注入。容器&#xff08;Container&#xff09;&#xff1a;放置所有被管理的对象。beans&#xff1a;容器中所有被管理的对…

Rust编程基础核心之所有权(下)

1.变量与数据交互方式之二: 克隆 在上一节中, 我们讨论了变量与数据交互的第一种方式: 移动, 本节将介绍第二种方式:克隆。 如果我们 确实 需要深度复制 String 中堆上的数据&#xff0c;而不仅仅是栈上的数据&#xff0c;可以使用一个叫做 clone 的通用函数。 看下面的代码…

国产数据库人大金仓Kingbase数据迁移工具

点击上方蓝字关注我 在做国产数据库适配过程中经常需要将现有数据库的数据迁移至国产数据库中&#xff0c;在适配在人大金仓Kingbase数据库时&#xff0c;可以使用KDTS进行数据迁移。 1. 支持迁移的数据库及对象 2. 迁移工具安装 地址&#xff1a;https://www.kingbase.com.c…

多输入多输出 | Matlab实现WOA-RBF鲸鱼算法优化径向基神经网络多输入多输出预测

多输入多输出 | Matlab实现WOA-RBF鲸鱼算法优化径向基神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现WOA-RBF鲸鱼算法优化径向基神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 Matlab实现WOA-RBF鲸鱼算法优化径向基神经网络…

农业水土环境与面源污染建模及对农业措施响应

目录 ​专题一 农业水土环境建模概述 专题二 ArcGIS入门 专题三 农业水土环境建模流程 专题四 DEM数据制备流程 专题五 土地利用数据制备流程 专题六 土壤数据制备流程 专题七 气象数据制备流程 专题八 农业措施数据制备流程 专题九 参数率定与结果验证 专题十 模型结…

【Python语言】比较四个数或多个数的大小

重点&#xff1a;sorted()函数可以对列表进行升序排序 思路&#xff1a;利用Python语言中的列表排序函数简单粗暴的解决比较大小问题 a int(input("请输入第一个数&#xff1a;")) b int(input("请输入第二个数&#xff1a;")) c int(input("请输…

反射型跨站点脚本攻击

测试过程: /ylpj/dwr/interface/%20idxIndexDicService/%22%3E%3Cscript%3Ealert(988)%3C/script%3E 解决方案: nginx添加 if ($args ~* "%3Cscript%3E") {return 400;}if ($request_uri ~* "%3Cscript%3E") {return 400; } 解决效果:

Java操作redis常见类型数据存储

目录 一、Java连接Redis 1.1 导入pom依赖 1.2 建立连接 二、Java使用Redis 2.1 字符串 String 2.2 哈希 Hash 2.3 列表 List 2.4 集合 Set 2.4 有序集合 Sorted Set 一、Java连接Redis redis与mysq都是数据库&#xff0c;java操作redis其实跟操作mysql的过程是差不多的…

C++性能优化笔记-6-C++元素的效率差异-7-类型转换

C元素的效率差异 类型转换signed与unsigned转换整数大小转换浮点精度转换整数到浮点转换浮点到整数转换指针类型转换重新解释对象的类型const_caststatic_castreinterpret_castdynamic_cast转换类对象 类型转换 在C语法中&#xff0c;有几种方式进行类型转换&#xff1a; // …