允许用户向WordPress主题添加自定义函数

时间:2013-02-05 作者:chowwy

我希望允许用户向我正在开发的主题添加功能,但不希望用户更改功能。php,因为此文件可能会使用主题更新进行更新。换句话说,我希望它能以与自定义CSS文件类似的方式工作。

如何设置用户功能。php文件,并确保在激活主题时也运行这些函数?

5 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

我的建议是get_template_part. 我认为这是最接近你想要的。

你可以直接放下get_template_part(\'userfuncts\'); 进入您的functions.php. 将加载userfuncts.php 从主题的主目录(如果文件存在)或子主题目录(如果适用)。有关函数如何搜索文件,请参阅Codex。它是PHP的升级版本include 真正地任何可以在中工作的函数functions.php 应该在包含的文件中工作。但这是一个重要的条件。有些内容无法从主题中很好地加载functions.php 并且需要在插件中。

然而,埃曼有一个很好的观点。虽然可以更新主题,但不会丢失userfuncts.php 文件,但情况未必如此。完全删除一个主题,然后上载更新是很常见的。我不知道自动更新程序是如何做到这一点的,因为我从未使用过该更新程序,但如果它删除并重新安装,您将遇到麻烦。

您可以为主题创建两个目录——主目录和第二个用户函数目录。

然后创建get_template_part-类似于从该目录加载文件的函数。使用它应该不难get_template_part 作为一个模型。你会有一种伪儿童主题。这可能会引起混淆,但好的文档会有很大帮助,我不知道这个解决方案有多“合适”。我只是想了想。希望我不会被骂:)

您的主题可以只安装自身和子主题,但如果您更改了子主题,您将面临相同的更新问题。

SO网友:EAMann

实际上,当主题更新时,您在主题中放置的任何文件都将被替换/删除。

相反,如果你想让用户添加自定义功能,他们应该通过自定义插件来实现。如果您有通过主题公开的挂钩和过滤器,那么定制功能插件将解决此问题。

基本上,它有两个文件:

自述。txt文件

=== My Functionality Plugin ===
Contributors:      me
Donate link:
Tags:
Requires at least: 3.4.2
Tested up to:      3.5
Stable tag:        1.0
License:           GPLv2 or later
License URI:       http://www.gnu.org/licenses/gpl-2.0.html

Adds custom functionality where needed

功能。php

<?php
/**
 * Plugin Name: My Functionality Plugin
 * Plugin URL:
 * Description: Adds custom functionality where needed
 * Version:     1.0
 * Author:      Me
 * Author URI:  
 * License:     GPL2+
 */

function filter_my_theme_copyright( $copyright ) {
    return \'&copy; 2013\';
}
add_filter( \'my_theme_copyright\', \'filter_my_theme_copyright\' );
如果不知道你的主题在做什么,或者你需要什么自定义功能,我就不能非常精确。但是,如果您公开了您希望用户执行的操作,并过滤您希望他们过滤的输出,那么任何人都可以使用这样的自定义功能插件,而无需直接对主题进行黑客攻击。

SO网友:Chip Bennett

要允许用户使用功能,您实际上有两个选项:

将您的主题设置为Child Theme-friendly 并鼓励用户在子主题中定义自定义函数functions.php

SO网友:Wyck

有一个插件允许您在管理中执行此操作,它允许使用便携式用户输入功能(主题无关),无需编辑主题的功能。php

您可以在此处看到:https://github.com/bungeshea/code-snippets

你可以从wordpress下载。此处组织:http://wordpress.org/extend/plugins/code-snippets/

屏幕截图:enter image description here

SO网友:Matty

为了确保您的客户能够轻松覆盖主题的各个方面,最好的选择是坚持WordPress现有的惯例,即:子主题。“functions.php”也适用于自定义用户输入的代码,但您说过您更愿意远离它,所以我将重点介绍其他选项。

一般经验法则如下:

Styles

覆盖CSS样式应该在子主题内的“style.CSS”文件中完成。

Functions

重写过程函数应该使用可插入函数来完成。WordPress Codex有一个例子how to setup pluggable functions.

Hooked Functions

虽然分配给钩子或过滤器的函数也可以是可插拔的,但您也可以鼓励客户在自己的替换中解开函数和钩子。这将为您的文件中的每个函数最多节省2行代码,因为您无法使函数可插入。

Template Parts

如果您希望客户能够轻松地覆盖主题输出的特定部分,而不必将整个模板文件复制到其子主题中,那么您可以有效地使用模板部分来实现这一点(例如,如果您的页脚区域包含小部件,然后可能包含一个信用部分,则每个部分都可以是模板部分)。

如上所述,有效放置do_action() 调用是允许客户挂接自己的代码的一种简单方法。

结合以上选项,您应该能够让客户使用现有的WordPress约定轻松定制主题,并使他们更容易将主题副本更新到未来版本。:)

结束

相关推荐

Functions.php:从博客中排除类别

所以很明显,如何从模板中排除某些类别,但我不想修改4个模板,使它们忽略某个类别。有没有一种方法可以将某个类别从阅读设置的“博客”集中排除?我正在将博客分配到名为“博客”的页面。。。但显然,档案和搜索也需要对这一超出类别的内容视而不见。我宁愿在里面做functions.php