将插件数据与主题集成的方法

时间:2011-08-11 作者:tollmanz

我想就开发提供主题集成的WordPress插件的最佳实践获得一些意见。

为了理解我提出的这个问题,让我从一个我很好奇的场景的假设示例开始。想象一下,我创建了一个名为“Discography”的插件。Discography注册了三种自定义帖子类型:“乐队”、“专辑”和“曲目”。该插件还提供了元框,用于提供每个帖子类型的详细信息,以及用于组织每个帖子类型的自定义分类法。这些立柱类型与Posts 2 Posts 插件。在管理员中,用户可以添加新的乐队,这些乐队可以与相册相关联,而相册又与曲目相关联,所有这些曲目都将通过元框和分类法向其添加大量其他数据。

现在,我不想让这个插件简单地为用户设置一个管理员来输入这些信息;我希望它为数据提供一些默认显示。更高级的用户/开发人员可以只使用此管理员。对她来说,获取这些数据并在主题中使用是很容易的;然而,如果没有一些默认视图,这个插件对大多数用户来说都是无用的。对于本例,您可以显示以下内容(括号显示了信息按照模板层次结构的顺序显示的方式):

乐队(single-prefix-band.php,single.php,index.php,shortcode)

  • 专辑(single-prefix-album.php,single.php,index.php,shortcode)
  • 曲目(single-prefix-track.php,single.php,index.php,shortcode)
  • 乐队列表(template-band-list.php,page-band-Listing.php,page-{id}.php,page.php,index.php,shortcode)
  • 专辑列表(template-album-list.php,page-album-list.php,page-{id}.php,page.php,index.php,shortcode)
  • 相册时间线(template-album-Timeline.php,page-album-Timeline.php,page-{id}.php,page.php,index.php,shortcode)
  • 再一次,我很好奇处理这种情况的最佳方式是什么?我想你可以做以下任何一项。

    Shortcodes

    短代码可以作为一种非常灵活和用户友好的方式,允许非开发人员在站点的任何位置添加乐队、专辑、曲目、乐队列表等。这将有助于在特定页面上显示乐队,或为每个乐队创建单独的页面(效率不高,但有些用户是这样处理的)。短代码将生成HTML,HTML将绑定到提供的CSS文件,该文件将提供所需数据的良好默认视图。所有内容都包含在插件文件中,不需要对主题进行任何操作。

    Template Files

    该插件还可以附带模板文件。可以对模板文件进行标记和样式设置,以获得良好的默认视图。您可以为用户提供将文件移动到主题文件夹的说明,以便主题在查看帖子类型时找到正确的模板。您甚至可以提供一个界面,允许用户只需单击一下即可移动文件(注意:我不会在激活时在用户的主题文件夹中创建文件,因为在没有用户启动的情况下将文件添加到主题中是邪恶的)。

    您还可以使用过滤器来利用这些文件,而无需将它们移出插件文件夹,从而保持所有内容都是独立的。我已经看到了用于此目的的“template\\u include”和“{$type}\\u template”过滤器。事实上,您可以使用themes文件夹中的模板,如果它们不存在,您可以使用这些过滤器来提供默认视图。

    The Question

    我想知道其他人认为这些情况下的最佳实践是什么,如果提出的想法有任何问题,以及我没有包括的任何替代方案。

    非常感谢。

    3 个回复
    SO网友:kaiser

    我不能回答你问的每一个问题,因为到目前为止,阅读问题需要足够的时间;),但我试图给你一些关于我开发免费开源插件的个人经验的见解。

    1. 永远不要做太多。功能是每个插件的死亡。首先构建一个基本版本,并测试用户的反应。如果你的插件得到了很多关注,你可以集成大部分需要的功能。

    2. 避免填充每个用例。你需要维护你的插件。WP每三个月提供一个新版本。有时很难使用所有插件。举个例子:设置API的新版本当前discussed on Trac. 当这项工作完成后,许多插件或主题开发人员可能需要更改大部分代码,而像我这样的一些人甚至在API之上编写了一个抽象层。因此,您需要返回,重写您的基础/抽象层,然后重写所有调用该层的部分的内容。我保证这是一项艰巨的工作。如果它与您的代码紧密结合,则更是如此。当您开始填充大量用例时,您还需要监控大量的WP核心代码演化,并且需要进行大量的工作来保持代码的最新状态。

    3. 永远不要尝试将大量代码示例(或模板)捆绑到插件或主题中。如果您想以开发人员和最终用户为目标:请使用您的博客获取文档。开发人员讨厌这样的东西,最终用户永远不会满意(参见:填充每个用例)。

    4. 明智地将代码划分为单个文件。经验法则:一个零件一个文件。示例:样式。php,脚本。php,分类法。php、cpts。php等。从“母亲”(工厂)类加载所有内容,并保持您的内容“可插入”。如果你需要重写东西,你会很容易找到的。如果开发人员正在搜索某些东西:他们将很容易找到它。有很多好名字的文件,不要伤害你。

    5. 如果您有一个基本样式(类)列表,leave it up to the user. 很有可能来自主题或其他插件的样式会截获您的定义(无论您添加了多少特定性)。试着用尽可能少的文字解释一下。

    6. 喜欢你的插件。但如果你觉得无聊就放手吧。:)

    简而言之,现在详细介绍一下您的插件想法:

    A. 模板文件不正确。正如我所说:在你的博客上记录它,在那里提供标记和样式的示例。你的博客会盈利(如果你有广告,你也会盈利)。

    B. 短代码很酷。如果插件不存在(在大多数情况下),它们不会伤害任何人,并且可以在以后扩展/演变为TinyMCE按钮(人们喜欢)。

    C. 明确你的插件需要另一个插件。如果其他插件没有退出(在本例中链接)或没有激活(您可以在激活时为用户执行此操作),请对此提出疑问,并在admin\\u通知中添加注释(通过register\\u activation\\u hook)。还要注意的是,这个插件来自一个可靠的来源,并将在未来几年内维护。

    注:我写的都是我的个人意见,这反映了我的经验

    SO网友:scribu

    虚拟页面

    我看到的第三种技术是指定一个特殊页面作为插件的占位符,并使用“内容”过滤器输出需要输出的任何内容。

    通过这种方式,您可以制作与主题结构融合的模板,因为您不必处理页眉、边栏、页脚和包装div。

    bbPress插件就是一个很好的例子:

    http://bbpress.trac.wordpress.org/browser/branches/plugin/bbp-includes/bbp-core-compatibility.php?rev=3434#L931

    SO网友:Wyck

    在某些方面,您必须权衡创建插件或主题之间的平衡,如果您的场景需要大量定制/功能,通常最好创建一个主题。这样,用户就可以根据外观进行自定义,这总是比让用户自定义功能更容易(通过到处插入短代码),您可以更好地控制功能,它可以与其他插件一起使用,等等。

    一个插件试图与市场上各种各样的主题进行深度集成,这必然会给你带来很多麻烦,老实说,也会给你带来很多工作。

    例如,与其创建一个基于音乐和唱片管理的非常集成的插件,不如为此创建一个主题,这对于需要定制工作的利基市场正变得越来越流行。一个真实世界的例子是基于房地产的主题,我不可能使用插件来实现这一点,因为它有如此深入的功能集,相反,它是作为主题从头开始创建的,因为主题无论如何都可以利用插件的所有功能。

    从营销角度来看,在平衡前端功能时,利基主题可能比插件做得更好。

    结束

    相关推荐