aurmil/slim3-skeleton-wordpress

A Slim Framework 3 应用骨架,支持 WordPress

v1.1.0 2018-04-19 10:36 UTC

This package is auto-updated.

Last update: 2024-09-16 04:42:06 UTC


README

WordPress 负责内容管理,而 Slim 用于前台渲染,混合 WordPress 和自定义页面/模板的内容。

但是……为什么?! 😯 我需要一个非常具体的多语言/多国家路由系统(这里没有包含,因为项目非常具体)来为具有用户友好的后台管理内容创建一个网站。还有……为了乐趣 😃

包含什么?

安装和用法

请先阅读我为我的 应用骨架 编写的简要文档。

要求:PHP 7 和 Composer

运行以下命令,将 [your-project-name] 替换为您想要创建的文件夹名称。

composer create-project aurmil/slim3-skeleton-wordpress [your-project-name]

.htaccess 文件、Web 服务器选择、虚拟主机、AllowOverride Allvar 文件夹权限等,请参阅主要文档。

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许可证。请参阅许可证文件以获取更多信息。