问题描述
我一直在尝试创建一个自定义帖子类型作为插件 (因为我已经看到这在各个地方推荐) 。
但是我有一个问题不在于如何,而是建立 CPT 作为插件的原因。
是… 添加 CPT 作为插件确实保持我的 functions.php 好整洁。
但…
-
假设我启用了
has_archive
,我还需要创建archive-cpt.php
,对吧? -
另外:为了显示 CPT,我需要创建一个自定义循环,所以我仍然需要创建
single-cpt.php
… 对吧? -
这些文件需要在主题中创建,对吧?
如果我正确理解,
-
如果我禁用插件:我仍然必须删除 (或隐藏或某事)
archive-cpt.php
和single-cpt.php
页面。 -
如果我切换主题:我还需要将这两个页面添加到新主题中。对?
我甚至没有碰到将默认循环添加到 CPT 的问题 (这对 plugin-based cpt 有影响) 。
那么为什么一个 CPT 插件?
最佳解决方案
对于在插件中定义 CPT 的技术原因,toscho 的答案是正确的,但在我看来,您的大部分问题源于对模板层次结构的误解。几乎,但不完全,您看到的每个模板文件是可选的。
With the exception of the basic index.php template file, Theme developers can choose whether they want to implement a particular template file or not. If WordPress cannot find a template file with a matching name, it skips down to the next file name in the hierarchy. If WordPress cannot find any matching template file, index.php (the Theme’s home page template file) will be used.
如果没有专门的文件,WordPress 将使用特定的专用文件 (如果它们存在但是 fall-back 到另一个文件 – 最终 index.php
) 。您的主题不需要执行任何特殊的处理或补偿您的插件’s CPT’s 。主题可以但不必。
- Assuming I’ve enabled
has_archive
I still need to createarchive-cpt.php
, right?
将使用 archive.php
号,如果失败,则 index.php
- Also: In order to display the CPT I need to create a custom loop, so I still need to create
single-cpt.php
…right?
再次,没有。同样的原因将使用 single.php
,如果不使用 index.php
。
- And these files need to be created in the theme, right?
是的,但它们是可选的。你根本不需要它们。
- If I disable the plugin: I still have to remove (or hide or something) the
archive-cpt.php
andsingle-cpt.php
pages.
不,你不需要做任何事情。不会使用模板。
- If I switch Themes: I still have to add those two pages into the new theme. Right?
错误。模板是可选的。您只需要他们,如果你想要一个自定义显示的职位类型。
当你明白主题和 CPT 不像你的问题那样紧密相连时,似乎有些其他的逻辑应该更有意义。
次佳解决方案
当常量 SHORTINIT
设置为 TRUE
(自定义 AJAX 处理程序,进口商或 API) 时,主题未加载,则不会将这些自定义帖子类型或分类法添加到任何帖子中。
模板是自定义内容的视图,它们不应该定义或依赖逻辑。
此外,在主题切换之后,用户不能再访问和更改帖子类型内容,因为在没有注册的情况下将没有接口。
禁用插件后,您不必更改主题。模板不再被使用了。
更新:插件的另一个优点是能够在网络范围内激活它们。我是 Multilingual Press 的主要开发人员,我们为用户提供翻译和连接自定义帖子类型帖子的功能。但是如果它们被绑定到一个主题,这是无法工作的,因为一个主题总是对每个站点有效,而不是整个网络。主题帖子类型真的很难翻译。
参见:Where to put my code: plugin or functions.php?
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。