blacktrs / modern-wp
基于 Symfony 的 WordPress 模板,拥有现代开发工具、更简单的配置和改进的文件夹结构
Requires
- php: >=8.1
- ext-mysqli: *
- blacktrs/symfony-wp-bundle: ^1.1
- composer/installers: ^1.12
- doctrine/annotations: ^2.0
- doctrine/doctrine-bundle: ^2.7
- doctrine/doctrine-migrations-bundle: ^3.2
- doctrine/orm: ^2.12
- phpdocumentor/reflection-docblock: ^5.3
- phpstan/phpdoc-parser: ^1.23
- roots/bedrock-autoloader: ^1.0
- roots/bedrock-disallow-indexing: ^2.0
- roots/wordpress: ^6.3
- symfony/asset: ^6.3
- symfony/cache: ^6.3
- symfony/config: ^6.3
- symfony/console: ^6.3
- symfony/dependency-injection: ^6.3
- symfony/doctrine-messenger: ^6.3
- symfony/dotenv: ^6.3
- symfony/expression-language: ^6.3
- symfony/finder: ^6.3
- symfony/flex: ^2.2
- symfony/form: ^6.3
- symfony/framework-bundle: ^6.3
- symfony/http-client: ^6.3
- symfony/http-foundation: ^6.3
- symfony/http-kernel: ^6.3
- symfony/intl: ^6.3
- symfony/mailer: ^6.3
- symfony/mime: ^6.3
- symfony/monolog-bundle: ^3.8
- symfony/notifier: ^6.3
- symfony/process: ^6.3
- symfony/property-access: ^6.3
- symfony/property-info: ^6.3
- symfony/proxy-manager-bridge: ^6.3
- symfony/routing: ^6.3
- symfony/security-bundle: ^6.3
- symfony/serializer: ^6.3
- symfony/string: ^6.3
- symfony/translation: ^6.3
- symfony/twig-bundle: ^6.3
- symfony/validator: ^6.3
- symfony/web-link: ^6.3
- symfony/webpack-encore-bundle: ^1.17
- symfony/yaml: ^6.3
- twig/extra-bundle: ^2.12|^3.0
- twig/twig: ^2.12|^3.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.23
- phpstan/extension-installer: ^1.1
- phpstan/phpstan: ^1.10
- phpstan/phpstan-doctrine: ^1.3
- phpstan/phpstan-phpunit: ^1.1
- phpstan/phpstan-symfony: ^1.2
- phpunit/phpunit: ^10
- psalm/plugin-symfony: ^5.0
- rector/rector: ^0.12
- roave/security-advisories: dev-latest
- symfony/browser-kit: ^6.3
- symfony/css-selector: ^6.3
- symfony/debug-bundle: ^6.3
- symfony/maker-bundle: ^1.50
- symfony/phpunit-bridge: ^6.3
- symfony/stopwatch: ^6.3
- symfony/var-dumper: ^6.3
- symfony/web-profiler-bundle: ^6.3
- szepeviktor/phpstan-wordpress: ^1.3
- vimeo/psalm: ^5.15
- weirdan/doctrine-psalm-plugin: ^2.9
README
ModernWP 是一个增强的 WordPress 模板,基于纯 Symfony 框架 和 Roots Bedrock。
ModernWP 是为需要更好结构和工具的基于 WordPress 的项目而创建的。您几乎可以同时使用 Symfony 和 WordPress 的所有功能。
此模板可用于将大型代码库从经典的重量级 WordPress 风格项目迁移到现代方法,而不会导致重大的向后兼容性损失。
特性
- 由 Symfony 驱动的结构项目
- 更简单的配置
- 从基于现代框架的解决方案中获取所有好处
- 内置 Roots Bedrock
要求
- PHP >= 8.1
- MySQL/MariaDB(由于 WordPress 依赖项)
安装
composer create-project blacktrs/modern-wp ./project
cd ./project
composer install
yarn install
- 在
.env
中配置DATABASE_URL
- 配置其他需要的 env 变量或 yaml 配置
Docker
- 将
docker-compose.dist.yml
复制到docker-compose.yml
- 如有需要,编辑
docker-compose.yml
- 运行
docker-compose up -d --build
可能的 Docker 问题
- 如果在
bin/console cache:clear
后导致 HTTP 错误500
,请删除var
目录并使用chmod 0777
重新创建它
本地环境
- 打开
https://
自定义主机名
- 在
docker-compose.yml
中将NGINX_HOST
替换为您的主机名 - 将条目
127.0.0.1 your_host.local
添加到/etc/hosts
本地 HTTPS
- 安装 mkcert
- 运行
mkcert -install
默认情况下,https 对 localhost
有效
如果需要为自定义主机名生成特定的 SSL 证书,请运行以下命令
mkcert \
-cert-file docker/cert/main.crt \
-key-file docker/cert/main.key \
your-host.local
- 将
your_host.local
替换为您希望的主机名 - 更新
docker-compose.yml
文档
配置
默认情况下,配置应考虑在 confing/**.yaml
文件中。
所有配置参数将以 SCREAMING_SNAKE_CASE
的形式转换成 php const,以便 WordPress 可以将其作为配置常量读取。
例如,以下参数将被转换成 PHP 常量 WP_DEBUG
,其值为 true
。更多示例可以在 config/packages/app.yaml
中找到
parameters: WP_DEBUG: true
控制器类型
您可以使用两种类型的控制器
- Rest API
- 模板页面
Rest API 控制器
- 每个 Rest API 控制器都可通过地址
https://your-site.com/api/controller/path
获取 - 在
/config/packages/app.yml
中的参数app.apiPrefix
可以更改api
前缀
基本上,任何非模板控制器都将被解释为 Rest API 控制器。示例可以在 src/Controller/Rest
目录中找到
模板控制器
- 每个模板控制器都指向 WordPress 页面地址。
- 要声明模板控制器,
Route()
属性的path
参数应包含特定的模板名称
例如,如果需要任何类型页面(如文章类型页面)的控制器,则声明的路由将如下所示
#[Route(path: 'page.php', name: 'some_page')] public function page(): Response { return new Response('my page'); }
可以为任何 WordPress 模板声明路由
更多示例可以在 src/Controller/Frontend
目录中找到
有关控制器的更多文档,请参阅symfony 文档
模板化
默认情况下,模板应该是 twig
格式,并存储在 templates
目录中。更多详情请参阅symfony 文档
钩子
建议在 Kernel::registerHooks()
方法中添加 WordPress 动作和过滤器的新的处理器声明
还建议为每个钩子使用单独的可调用服务类作为处理器。为了防止 Kernel 类膨胀,最好将钩子声明作为组存储在不同的类中。
插件
可以从 WordPress 管理仪表板或作为Composer 包添加插件
与数据库交互
为了方便地与数据库交互,建议使用Doctrine ORM
在 src/Entity
中生成默认 WP 表的实体集合。
模板扩展
要实现更深入的配置,请编辑以下文件
config/bootstrap.php
- 引导配置public/app/mu-plugins/register-application-config.php
- 模板 WordPress 加载器public/app/themes/site-default/*
- 默认 WP 主题
前端资源
建议使用 Symfony Encore
和 Symfony Asset
绑带来构建和使用前端资源。
编译后的资源最好存储在 public
目录中(例如 public/build
)