aurmil / slim3-skeleton-wordpress
A Slim Framework 3 应用骨架,支持 WordPress
Requires
- php: >=7.0.0
- akrabat/rka-slim-session-middleware: ^2.0
- illuminate/cache: ^5.5
- illuminate/filesystem: ^5.5
- monolog/monolog: ^1.21
- roave/security-advisories: dev-master
- slim/csrf: ^0.8.1
- slim/flash: ^0.2.0
- slim/slim: ^3.5
- slim/twig-view: ^2.2
- swiftmailer/swiftmailer: ^6.0
- symfony/yaml: ^3.1
- tuupola/slim-basic-auth: ^2.3
Requires (Dev)
- symfony/var-dumper: ^3.3
This package is auto-updated.
Last update: 2024-09-16 04:42:06 UTC
README
WordPress 负责内容管理,而 Slim 用于前台渲染,混合 WordPress 和自定义页面/模板的内容。
但是……为什么?! 😯 我需要一个非常具体的多语言/多国家路由系统(这里没有包含,因为项目非常具体)来为具有用户友好的后台管理内容创建一个网站。还有……为了乐趣 😃
包含什么?
- 我的自己的 Slim 3 应用骨架
- WordPress 支持
- Illuminate/Cache v5.5 和 Illuminate/Filesystem v5.5
- Tuupola PSR-7 Basic Auth Middleware v2
安装和用法
请先阅读我为我的 应用骨架 编写的简要文档。
要求:PHP 7 和 Composer
运行以下命令,将 [your-project-name]
替换为您想要创建的文件夹名称。
composer create-project aurmil/slim3-skeleton-wordpress [your-project-name]
.htaccess
文件、Web 服务器选择、虚拟主机、AllowOverride All
、var
文件夹权限等,请参阅主要文档。
WordPress
- 可选:您可以将
wp
文件夹重命名为任何您想要的名称,只需在wordpress.yaml
配置文件中将正确的文件夹名称放入即可。 - 解压 WordPress 存档到
public/wp
(或如果您已更改它)文件夹并安装它。
WordPress 集成
元标题
来自 Slim 3 应用骨架的配置条目 app.title
在这里未使用。相反,标题是从 WordPress 配置中读取的。
在主页上,元标题由博客名称 + 博客描述组成,就像一个正常的 WordPress 主页一样。
文章列表
WordPress 在其自身中处理列表中要显示的文章数量。
显示文章列表的所有页面(主页、分类、标签等)在其路由的末尾包含一个可选参数:用于分页的 /page/{page}
。
路由
我从 WordPress 读取所有路由格式以最小化错误,避免未来兼容性问题并支持 WordPress 配置中的更改(例如:在管理区域中编辑分类或标签基本名称)。
WordPress 内容路由在 Slim 应用程序中尽量与原始 WordPress 路由保持一致。我还考虑了在 WordPress 内容路由中可选使用尾部斜杠。这取决于 WordPress 永久链接设置是否以斜杠结束。
您可以添加您自己的路由用于经典的 Slim 页面/内容,但请注意它们不要与 WordPress 内容路由匹配。
缓存
如果配置条目 app.use_cache
设置为 true
,WordPress 路由将存储在缓存中,其持续时间可以在 wordpress.yaml
配置文件中配置(默认:1 天)。
此应用程序缓存可以通过受基本 HTTP 认证的 /clear-cache
路由刷新。允许的用户在 security.yaml
配置文件中定义。
文章
我让 WordPress 使用 get_permalink()
构建文章永久链接,然后我使用它们在 Slim 应用程序中构建文章路由。
我决定为每篇文章创建一个路由,因为它允许你使用pathFor('wp-post-{post_id}')
(在Slim应用代码中使用router->pathFor()
,在Twig模板中使用path_for()
)而不必知道文章的固定链接结构。如果你在WordPress管理区域更改固定链接结构,你不需要更改你的代码,文章链接仍然有效。
页面
路由:/{page_slug}
,从$wp_rewrite->get_page_permastruct()
读取
由于它直接在应用根目录(/
)上,我们不能匹配所有内容([a-zA-Z0-9_-]+
),因为这会阻止使用其他根路由。因此,现有的页面别名将在该路由中动态列出,以仅匹配相关的URI。
分类
路由:/{category_base}/{category_slug}
,从$wp_rewrite->get_category_permastruct()
读取
标签
路由:/{tag_base}/{tag_slug}
,从$wp_rewrite->get_tag_permastruct()
读取
作者
路由:/author/{author_slug}
,从$wp_rewrite->get_author_permastruct()
读取
存档
WordPress支持多种类型的存档列表:年度、月度、日度、周度和简单帖子列表。每种类型都有一个路由模式,我尝试重复使用(除了最后一个,它属于经典帖子路由)
- 年度:
/{yyyy}
,从$wp_rewrite->get_year_permastruct()
读取 - 月度:
/{yyyy}/{mm}
,从$wp_rewrite->get_month_permastruct()
读取 - 日度:
/{yyyy}/{mm}/{dd}
,从$wp_rewrite->get_day_permastruct()
读取 - 周度:WordPress使用GET参数,例如:
/?m=2018&w=9
,因此我创建了一个特定的新路由:/{yyyy}/w/{w}
其中yyyy
=1900-2099,mm
=01-12,dd
=01-31,w
=1-53。
搜索
默认情况下,WordPress在主页上使用GET参数,例如:/?s=test
。我做了同样的事情,但使用了一个专门的路线:/search
,从$wp_rewrite->get_search_permastruct()
读取。
为了在搜索结果分页时具有更美观的URI格式,我还支持/search/{search}
,以避免这种情况:/search/page/5/?s={search}
。
特定类
App\Controllers\WordPressController: 包含所有与WordPress相关的操作。基本上,每个操作都读取接收到的参数,请求WordPress获取相应的项目,将它们传递给模型进行处理,然后将结果传递给视图,并在必要时传递分页数据。
App\Models\WordPress\PostConverter: 使用WordPress函数将WP_Post对象转换为标准PHP对象,以便更容易地进一步使用/访问帖子数据。
App\TwigExtensions\WordPress: 声明模板文件中允许访问WordPress函数的Twig函数(帖子缩略图、帖子元数据、导航菜单等)。函数名称和参数大多与WordPress相同
- get_the_post_thumbnail
- get_post_meta =>
$single
被强制设置为true - get_bloginfo
- get_the_category_list
- get_the_tag_list
- wp_nav_menu =>
echo
被强制设置为false
此类还包括一个自定义函数 replaceWordpressLinks($html)
,可通过Twig函数 replace_wp_links(html)
获取。从WordPress获取数据时,如果有一些链接,它们都指向预期的WordPress页面。但我们需要它们指向Slim页面。此函数执行这项工作,替换链接的 href
值。
这只能在WordPress和Slim应用路由模式相同的情况下工作,这是我为这个骨架所做的。如果你在Slim应用中更改了WordPress内容路由,你将不得不处理这个问题。
布局
在templates/layouts/main.twig
中,设置在wp_nav_menu
调用中显示的菜单名称。
布局还包含一个在导航菜单旁边的搜索表单。你将在应用public
目录成功安装WordPress后取消注释此表单。
待办事项
- Polylang支持+语言选择器
- 在创建/编辑/删除文章或页面时清除缓存
许可
MIT许可证。请参阅许可证文件以获取更多信息。