happyr / wordpress-bundle
Requires
- php: >=7.2
- psr/http-client: ^1.0
- psr/http-factory: ^1.0
- symfony/config: ^4.4 || ^5.3 || ^6.0
- symfony/dependency-injection: ^4.4 || ^5.3 || ^6.0
- symfony/framework-bundle: ^4.4 || ^5.3 || ^6.0
- symfony/http-kernel: ^4.4 || ^5.3 || ^6.0
- twig/twig: ^2.14 || ^3.3
Requires (Dev)
- phpunit/phpunit: ^8.5 || ^9.5
README
让您的编辑使用WordPress出色的后端编写博客文章,同时仍然提供超快的响应,利用Twig与您的Symfony应用程序集成博客内容。作为额外奖励,这意味着您的WordPress应用程序无需暴露在互联网上。
这是一个与WordPress REST API通信的小型包。我们确保缓存每个请求,以便您的博客不会被请求淹没。
WordPress配置
重写链接
我们需要重写WordPress中的绝对URL。为了让我们更容易操作,请设置您的页面和帖子URL前缀为"page"。
清除缓存
您应该配置Symfony非常积极地缓存WordPress的资源。但是,当编辑进行更新时,您需要清除缓存并重新下载更新的资源。
Symfony包提供了一个用于清除缓存的端点。当帖子更新和删除时,您应使用此端点。
(待办事项:在 Resources/Wordpress
中添加一个小型的WordPress插件)
Symfony安装
设置此包需要很多移动部件。但它们都很有道理。让我们一一来看
API端点
您的WordPress博客在哪里?您应该定义到内置REST API的端点。以下示例中,我们假设您使用以下URL访问您的WordPress应用:http://demo.wp-api.org
。
# /config/packages/happyr_wordpress.yaml wordpress: url: 'http://demo.wp-api.org/wp-json'
模板
此包包含2个默认模板。一个是列出最新帖子的索引页面模板,另一个是单个帖子/页面模板。当然,您可以用您喜欢的模板替换这些模板。这可以通过一些配置轻松完成。
# /config/packages/happyr_wordpress.yaml wordpress: # ... controller: index_template: index.html.twig page_template: page.html.twig
路由
要启用默认控制器,您需要包含提供的routes.yaml。
# /config/routes.yaml wordpress: resource: '@WordpressBundle/Resources/config/routes.yaml' prefix: '/p' # optional
当然,您可以使用自己的控制器。只需确保您定义一个名为happyr_wordpress_page
的路由即可。
# /config/packages/happyr_wordpress.yaml wordpress: # ... controller: false
# /config/routes.yaml # ... happyr_wordpress_page: path: /wp/{slug} methods: 'GET' controller: App\Controller\MyWordpressController::show requirements: slug: '.+'
缓存
WordPress是一个伟大的工具,但它的速度比您的Symfony应用程序慢。确保我们缓存所有来自WordPress的响应。我们使用Symfony\Contracts\Cache\CacheInterface
进行缓存,因为它内置了冲击保护。
# /config/packages/happyr_wordpress.yaml wordpress: # ... cache: service: 'App\Cache\SymfonyCache' ttl: 604800 # One week
解析器
当我们从WordPress获取数据时,我们需要以某种方式解析它。我们需要确保所有链接都指向symfony应用程序,而不是WordPress应用程序。我们还需要处理图像引用。
您可以通过配置禁用不需要的解析器
# /config/packages/happyr_wordpress.yaml wordpress: # ... parser: image: false link: false url: false
您还可以通过注册一个新服务并使用happyr_wordpress.parser.page
或happyr_wordpress.parser.menu
标记来添加自己的解析器。
图像
我们不想任何图像引用指向WordPress应用程序。我们需要下载图像并将其上传到某个好地方。比如AWS S3。您可以通过使用自定义上传器来配置RewriteImageReferences
解析器来实现这一点。确保您的上传器实现了ImageUploaderInterface
。
# /config/packages/happyr_wordpress.yaml wordpress: # ... parser: image: uploader: 'App\MyUploaderService'
默认上传器将图像上传到本地文件夹。如果只有少量图像且您的Symfony应用程序前面有CloudFront或任何其他反向代理缓存,这就可以了。
# /config/packages/happyr_wordpress.yaml wordpress: # ... local_image_uploader: local_path: '%kernel.project_dir%/public/uploads' public_prefix: '/uploads'