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


17

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

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

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

  • 频段(单前缀-band.php,single.php,index.php,简码)
  • 专辑(single-prefix-album.php,single.php,index.php,shortcode)
  • 曲目(单前缀-track.php,single.php,index.php,简码)
  • 乐队列表(template-band-list.php,page-band-listing.php,page- {id} .php,page.php,index.php,简码)
  • 专辑列表(template-album-list.php,page-album-listing.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)

重要的是,这些帖子类型必须有一些默认的表示形式,因为默认模板文件不会显示每种帖子类型所需的所有信息。例如,默认情况下,“二十一”主题将仅显示专辑的名称,类别,描述和发布日期。对于专辑来说不是很有用。我想提供一个单独的帖子模板,其中包含乐队,发行日期,唱片标签,专辑版本,曲目等。作为插件开发人员,我觉得提供这一点很重要。我知道该模板不会针对每个主题都适用,但是应该有一些默认设置可以与用户主题进一步集成。

再次,我很好奇如何处理这种情况?我认为您可以执行以下任何操作。

简码

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

模板文件

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

您还可以使用过滤器来利用这些文件,而无需将其移出plugin文件夹,从而使所有内容保持独立。我已经看到了用于此目的的“ template_include”和“ {$ type} _template”过滤器。实际上,您可以使用主题文件夹中的模板,如果模板不存在,则可以依靠这些过滤器提供默认视图。

问题

我想知道别人认为这些情况下的最佳做法是什么,如果所提出的想法在任何方面都存在问题,并且我没有列出任何替代方案。

谢谢!


3
如果只有对WPSE的所有问题都得到深思熟虑... :)
scribu 2011年

@scribu ...您只是在说这是因为我包括了您插件的链接;)严重的是,感谢您的赞美。我担心这将是一个愚蠢的问题,但这是困扰我一段时间的问题。
tollmanz 2011年

来自我的另一个+1。对于“为什么”,请阅读@scribu注释。
凯撒

@kaiser&scribu ...希望大家都对这个话题发表想法。我很想听听你怎么说。
tollmanz

@tollmanz已经完成。但是,如此激烈的问题需要一点思考和时间。
kaiser

Answers:


4

到目前为止,我无法回答您提出的每个问题,因为阅读问题花了足够的时间;),但是我尝试为您提供一些有关我在开发免费的开源插件方面的个人经验的见解。

1。永远不要做太多。功能是每个插件的终结。首先构建基本版本,然后测试用户的反应。如果您的插件引起了广泛关注,则可以集成最需要的功能。

2.避免填充每个用例。您需要维护您的插件。WP每三个月提供一个新版本。有时很难跟随所有插件。举例说明:Trac当前正在讨论 Settings API的新版本。完成此操作后,就有可能许多插件或主题开发人员需要更改大部分代码,并且某些人(例如我)甚至在API上方编写了抽象层。因此,您需要返回,重写您的基础/抽象层,然后重新处理所有需要进行此操作的部分。我保证这是很多工作。甚至与代码紧密相关。当您开始填充大量用例时,您还需要监视很多WP核心代码,并且需要进行大量工作以使代码保持最新。

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

4.明智地将代码分成单个文件。经验法则:一份一份一份。例如:styles.php,scripts.php,taxonomies.php,cpts.php等。从“母亲”(工厂)类加载所有内容,并使您的内容“可插拔”。如果您需要重写内容,则可以轻松找到它。如果开发人员正在寻找东西:他们会很容易找到它。很多名字很好的文件,不要伤害您。

5.如果您获得了基本样式(类)的列表,则将其留给用户。可能性太高了,主题或其他插件中的样式将拦截您的定义(无论您投入多少专一性)。只是尝试用尽可能少的文字来解释它。

6.爱你的插件。但是,如果您感到无聊,就放手。:)


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

答:模板文件是错误的。正如我所说:在您的博客上记录下来,在其中提供示例标记和样式。您的博客将盈利(如果您有广告也将盈利)。

B.短代码很酷。如果该插件消失了(在大多数情况下),它们不会对任何人造成伤害,并且可以稍后将其扩展/发展为TinyMCE按钮(人们喜欢)。

C。明确说明您的插件需要另一个插件。对这个问题提出质疑,如果另一个插件没有退出(在这种情况下链接它)或未激活(您可以在激活时为用户执行此操作),并向admin_notices添加注释(通过register_activation_hook)。另请注意,此插件来自受信任的来源,并将在未来几年内进行维护。

注意:我所写的不过是我个人的见解,反映了我的经验。


1
对于TinyMCE(或其他)短代码按钮+1,此技术对非技术娴熟的用户是如此有用,并且有助于整个主题集成。
Wyck

1
感谢您的想法。这里有很多通用的插件知识。关于我的问题,听起来您的方法是在主题整合方面付出很少;相反,您希望用户通过文档来弄清楚。我可以看到为什么这是一种合理的方法,但是与此同时,我这样的文件会导致许多用户感觉插件中缺少某些内容。在我的示例中,我认为如果没有内置的支持来显示乐队/专辑/曲目,用户会感觉有些坏处。
tollmanz 2011年

如果您要坚持使用,那么我建议您确实使用短代码向cpt(或其他位置)添加标记。关于样式:我只需要检查child> parent主题文件夹中某处是否存在特定的样式表即可。如果是:它将以静默方式覆盖/统治核心样式表。这样,您也许可以同时满足两个开发人员的最终用户需求。
kaiser

@kaiser ...两个都指向那里。
tollmanz 2011年

2

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

试图与市场上各种主题紧密集成的插件必将给您带来很多麻烦,并且为您带来很多工作。

例如,与其创建一个基于音乐和唱片管理的高度集成的插件,而不是为此创建一个主题,它在需要定制作品的利基市场中变得越来越流行。一个真实的示例将是一个基于房地产的主题,因为它具有如此深的功能集,所以我无法为此使用插件,而是将其作为主题从头开始创建,因为主题可以利用插件的所有功能。

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


将其概念化为插件的好处(尤其是为了获得营销利益)。最大的问题是,并非总是需要插件及其数据才能导致整个主题。不幸的是,它可能只是站点的较小组成部分,因此需要主题化。不过,我得到的是更广泛的观点,那就是不可能完全满足所有用户组的需求,而只针对一组用户更好。
tollmanz

2

虚拟页面

我看到的第三种技术是为插件分配一个特殊页面作为占位符,并使用'the_content'过滤器输出需要输出的内容。

这样,您就可以制作与主题结构融合的模板,因为您不必处理页眉,侧栏,页脚和包装div。

bbPress插件中提供了一个很好的例子:

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


您会提供代码示例吗?我想这是很多插件开发人员都希望看到的东西。(+1)。
kaiser

您可以查看新的bbPress插件作为示例。
scribu

这很有趣。在作出判断之前,我必须先看一下代码。
tollmanz

@scribu:我正在搜索它以添加链接,但无法通过plugins.svn找到它。您能否为以后的读者发布链接?谢谢。
kaiser

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.