我希望允许用户向我正在开发的主题添加功能,但不希望用户更改功能。php,因为此文件可能会使用主题更新进行更新。换句话说,我希望它能以与自定义CSS文件类似的方式工作。
如何设置用户功能。php文件,并确保在激活主题时也运行这些函数?
我希望允许用户向我正在开发的主题添加功能,但不希望用户更改功能。php,因为此文件可能会使用主题更新进行更新。换句话说,我希望它能以与自定义CSS文件类似的方式工作。
如何设置用户功能。php文件,并确保在激活主题时也运行这些函数?
我的建议是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
作为一个模型。你会有一种伪儿童主题。这可能会引起混淆,但好的文档会有很大帮助,我不知道这个解决方案有多“合适”。我只是想了想。希望我不会被骂:)
您的主题可以只安装自身和子主题,但如果您更改了子主题,您将面临相同的更新问题。
实际上,当主题更新时,您在主题中放置的任何文件都将被替换/删除。
相反,如果你想让用户添加自定义功能,他们应该通过自定义插件来实现。如果您有通过主题公开的挂钩和过滤器,那么定制功能插件将解决此问题。
基本上,它有两个文件:
=== 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
/**
* 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 \'© 2013\';
}
add_filter( \'my_theme_copyright\', \'filter_my_theme_copyright\' );
如果不知道你的主题在做什么,或者你需要什么自定义功能,我就不能非常精确。但是,如果您公开了您希望用户执行的操作,并过滤您希望他们过滤的输出,那么任何人都可以使用这样的自定义功能插件,而无需直接对主题进行黑客攻击。要允许用户使用功能,您实际上有两个选项:
将您的主题设置为Child Theme-friendly 并鼓励用户在子主题中定义自定义函数functions.php
有一个插件允许您在管理中执行此操作,它允许使用便携式用户输入功能(主题无关),无需编辑主题的功能。php
您可以在此处看到:https://github.com/bungeshea/code-snippets
你可以从wordpress下载。此处组织:http://wordpress.org/extend/plugins/code-snippets/
屏幕截图:
为了确保您的客户能够轻松覆盖主题的各个方面,最好的选择是坚持WordPress现有的惯例,即:子主题。“functions.php”也适用于自定义用户输入的代码,但您说过您更愿意远离它,所以我将重点介绍其他选项。
一般经验法则如下:
Styles
覆盖CSS样式应该在子主题内的“style.CSS”文件中完成。Functions
重写过程函数应该使用可插入函数来完成。WordPress Codex有一个例子how to setup pluggable functions.Hooked Functions
虽然分配给钩子或过滤器的函数也可以是可插拔的,但您也可以鼓励客户在自己的替换中解开函数和钩子。这将为您的文件中的每个函数最多节省2行代码,因为您无法使函数可插入。Template Parts
如果您希望客户能够轻松地覆盖主题输出的特定部分,而不必将整个模板文件复制到其子主题中,那么您可以有效地使用模板部分来实现这一点(例如,如果您的页脚区域包含小部件,然后可能包含一个信用部分,则每个部分都可以是模板部分)。如上所述,有效放置do_action()
调用是允许客户挂接自己的代码的一种简单方法。
结合以上选项,您应该能够让客户使用现有的WordPress约定轻松定制主题,并使他们更容易将主题副本更新到未来版本。:)
所以很明显,如何从模板中排除某些类别,但我不想修改4个模板,使它们忽略某个类别。有没有一种方法可以将某个类别从阅读设置的“博客”集中排除?我正在将博客分配到名为“博客”的页面。。。但显然,档案和搜索也需要对这一超出类别的内容视而不见。我宁愿在里面做functions.php