我的代码放在哪里:插件还是函数.php?

时间:2012-11-18 作者:fuxia

是否有easy to understand scheme 决定什么类型的代码属于插件或主题的functions.php?

那里are many cases 还有很多debates 关于这个话题,主要是因为对WordPress的内部工作有一些误解。我要求的答案是基于事实,而不是观点。

它应该解释如何处理这些问题(可能更多):

自定义帖子类型和分类add_theme_support( \'automatic-feed-links\' );meta 元素主题切换通常有正反两面。我们最受欢迎的问题Best Collection of Code for your functions.php file 得到了很多代码片段作为答案,至少是有争议的<我们需要初学者能够理解的标准,也许是一份检查表——以及理由。

另请参见Chip Bennett在我们的元网站上提出的相关问题:Questions specifically asking for a solution "without a plugin"

相关:Where do I put the code snippets I found here or somewhere else on the web?

6 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

我想从这个问题开始:Is the functionality related to presentation of content, or with generation/management of content, or of the site, or of the user identity?

如果功能is not related 特别是内容的呈现,那么它就完全在插件领域内了。此列表很长:

修改核心WP过滤器(wp_head 内容,如规范链接、生成器和其他HTML元等,网站Favicon发布内容快捷码,如果功能is related 若要呈现内容,则它是主题中的候选内容。在这一点上,我将回到@Raf912\'s Theme-switch criterion: would you miss the functionality when you switch Themes? 如果这个问题的答案是no, 那么功能就属于主题了。一些示例:

删除/覆盖WP core Gallery CSS过滤帖子摘录长度、“阅读更多”文本等add_theme_support() (我想这应该是显而易见的)

  • 自定义CSS
    • 通常,这两个问题将提供一条相当清晰的区分线;然而,也有例外。

      自定义帖子类型

      例如,自定义帖子类型是内容生成和呈现的一种独特混合,因为模板层次结构适用于单个帖子类型archive index pagessingle post pages. CPT的内容生成方面通常将其置于插件领域;然而,插件无法定义固有地适合任何给定主题的设计/布局/样式的模板页面(尤其是如果CPT显示的不是通常的标题/内容/元数据,或者具有与之关联的自定义分类法)。

      从长远来看,解决这一差异的办法,IMHO,是为给定类型的内容(房地产列表、日历事件、电子商务产品、图书/媒体库条目等)的CPT定义制定一个标准公约/共识。这样,用户生成的内容将在实现给定CPT的标准/约定定义的主题之间保持可移植性,而主题开发人员保留在主题模板文件中定义该CPT的设计/布局/样式的灵活性。

      社交媒体链接类似地,我通常会说,社交媒体档案链接在当前主题中几乎无处不在,是插件领域,因为它们与内容的呈现无关。最好的解决方案是在核心的某个地方定义这些概要文件;然而,目前还没有定义这些联系的标准/共识方法。它们是在站点设置级别上定义的,还是在每个用户的基础上定义的?如果按用户,模板中会显示哪个用户的元?等

      因此,从长远来看,解决这一差异的方法是要么核心定义这些链接的定义位置,要么主题开发人员社区形成自己的共识。与此同时,除了在每个主题中定义它们之外,真的什么都没有。

    SO网友:Ralf912

    代码位置最佳的简单测试:

    将代码写入函数。php切换主题您是否错过了功能,博客是否工作不正常,或者旧主题的片段(例如短代码)是否留下?

    是:将其放入插件

    否:将其保留在功能中。php

    示例:编写一个短代码。切换主题后,简单的短代码将保留在帖子中。因此,它将更好地放置在插件中。

    编写一个函数来列出最后的注释。切换主题后,一切正常,因为其他主题可能具有等效功能。

    这实际上取决于代码和它将做什么。有些代码只影响主题的样式或内容,有些代码会修改博客帖子。

    SO网友:Matthew Boynes

    我认为这个问题没有一个简单的答案,但我打赌我们可以制作一个流程图来帮助做出决定。下面是这样一个流程图的大致轮廓,可以而且应该加以扩展。评论和建议!

    此代码是否将托管在WordPress的单个站点安装上<是的-网站的主题只会随着主要的重新设计和功能的改变而改变吗<是-问题代码是否特定于当前设计<是:功能。php

  • 否:插件
    • 否(它经常更改或一时兴起)-插件
      • 否(Multitsite)-您是托管多站点安装还是托管允许插件的多站点解决方案<是:所讨论的功能是否特定于此站点,或者是否可以/应该由网络中的其他站点使用<特定于此站点:功能。php在多个站点之间共享-是否要在每个站点上强制使用它<是:插件,存储在mu plugins目录或网络激活中否:这是由不相关的站点组成的网络吗?(例如,不同的客户机)是:如果客户机A看到或激活了您为客户机B、C和D编写的插件,这是不好的还是不专业的?(例如,可能会破坏网站或导致不需要的功能)是:功能。php:否:插件(由不允许插件的VIP等服务托管):使用函数。php
    我不知道如何适应这里的一些其他想法:

    父主题—有时对于共享功能,最好创建一个父主题,并将功能放在父主题的函数中。php文件

  • 大型多站点安装的插件目录可能很快变得难以控制,因此,有时低百分比的站点(例如,<;1%)使用的共享功能最好在功能中复制。php文件
  • SO网友:Brad Dalton

    从这里开始Themes VS Plugins

    向子主题添加自定义代码,以便在更新父主题时不会丢失自定义代码。

    您还可以创建一个特定于站点的插件,该插件还包含所有自定义代码。

    就编写代码与插件而言,您可以使用插件来实现和实现功能。然而,对于大多数您想要的东西,手工编码是最好的,因为它更容易修改,除非您是主题开发人员,否则在某些情况下,如元框,您可能会考虑使用插件。

     function modify_contact_methods($profile_fields) {
    
    // Add new fields
    $profile_fields[\'twitter\'] = \'Twitter Username\';
    $profile_fields[\'facebook\'] = \'Facebook URL\';
    $profile_fields[\'gplus\'] = \'Google+ URL\';
    
    return $profile_fields;
    }
    add_filter(\'user_contactmethods\', \'modify_contact_methods\');
    

    http://codex.wordpress.org/Plugin_API/Filter_Reference/user_contactmethods

    <添加新的自定义帖子类型-Code CodeWordPress Permalink Settings

    SO网友:Privateer

    我知道这是一匹死马,芯片几乎已经覆盖了它,但我想补充一些想法。

    If you make a living programming 如果你发现自己在截止日期之前就在wordpress网站上工作,你会发现这真的取决于时间。

    通常情况下,尤其是对于那些刚刚起步的人来说,只需在主题中添加所需内容并称之为完成,就可以更快、更简单地完成。

    尽管如此,if you work on wordpress on a semi regular basis, you should seriously consider doing the following:


    1. Build out a plugin skeleton
    这应该可以处理您通常需要对插件执行的所有操作,包括激活、停用、版本更新、构建管理面板和卸载。

    如果您花时间这样做,您会发现:

    通过插件添加功能不再需要太多额外的时间,您可以开始构建一个可靠的插件列表,以便根据需要在其他项目上重复使用,从长远来看可以节省大量时间and 更快地完成未来的项目。


    1. Build out a theme skeleton
    这应该处理主题中通常需要的所有内容:

    核心样式表,包含您常用的样式(重置等)

  • 适当的索引。php文件,处理任何模板函数所需的所有内容。php文件-虽然您不会经常使用它,但它仍然会派上用场
  • 完成后,构建一个使用主主题的子主题框架。

    添加样式表,引用父主题

    如果执行上述操作,则可以执行以下操作:

    花你新找到的空闲时间熟悉PHP、WordPress、JavaScript、CSS和/或mySQL。。。你对这些知识了解得越多,完成事情的速度就会越快all of the above, 你会发现,芯片的答案将不仅是理想的,它将成为最佳的。

    SO网友:CO4 Computing

    简单的答案是。。

    代码是否依赖于特定主题中内置的任何功能?如果是,请输入主题。

    是否希望此代码可以在站点之间和主题之间转移?如果是,则插入插件。

    如果对以上两个问题的答案都是否定的,那么想象一下未来5年该重新设计网站的情景。您正在编写的代码的功能是否能够在下一次设计更新中幸存下来?如果是,请插入插件。

    此外,如果您没有使用子主题,并且计划更新主题,我还建议您使用插件。

    结束

    相关推荐

    Add_ShortCode()在函数内不起作用

    我有一个自定义的帖子类型bhour, 带字段bh_shortcode. 保存这种类型的帖子时,我希望它根据帖子的值bh_shortcode.如果bh_shortcode 是“test”,当一个[测试]快捷码标记出现在一个普通的post类型上时,不会发生任何事情--[测试]文本不会被替换。如果我放置add_shortcode(\'test\',\'save_bhour_details\'); 在功能之外,将替换[测试]文本。如何使用add_shortcode 函数内部的另一个函数?function bhou