一种方法是使用类本身的静态方法,正如@leymannx在回答中所解释的那样。
我更喜欢一种稍微不同的方法,这是一种更好/更干净的方法(但这只是我的观点,所以请自由地与这种说法争论)。我是这样做的:
如果某个函数应该可以在模板中使用,那么我将其注册为模板标记(因此我将其命名为WordPress-get_X
为了得到一些东西the_X
用于打印某物如果某个函数可用作短代码,那么我注册这样的短代码然后,我为上面的函数/短代码注册自己的过滤器/操作挂钩,在我的类中,我使用这些挂钩并编写正确的代码-这样代码就可以正确地封装在类中还有一些(非常基本的)示例:
在文件中template-tags.php
我将添加以下代码:
function the_wpse_hello_world_message( $name = \'\' ) {
echo get_wpse_hello_world_message( $name );
}
function get_wpse_hello_world_message( $name = \'\' ) {
return apply_filters( \'get_wpse_hello_world_message\', \'Hello World\', $name );
}
因此,任何人都可以轻松地在代码中的任何地方使用这两个函数,并且很容易找到我插件的“公共API”。
后来在我的课堂上,我做了这样的事情:
class My_WPSE_Super_Plugin {
protected function initHooks() {
add_filter( \'get_wpse_hello_world_message\', array( $this, \'get_wpse_hello_world_message_filter\' ), 10, 2 );
}
...
protected get_wpse_hello_world_message_filter( $result, $name ) {
if ( trim($name) ) {
return \'Hello, \' . $name . \'!\';
}
return $result; // or return \'Hello world!\'.
}
}
这种方法的优点是(IMHO):
学习插件的“公共API”更容易(如果团队更大,或者如果你将长期使用给定的站点,这一点很重要)
类中的真实代码得到了正确的封装,“公共API”与实际实现分离,因此很容易记录(为用户编写一些注释)并在以后进行重构。。。比如说,班级变得越来越大,你想把它分成更小的班级?然后呢?所有用户都必须更改其所有模板吗它允许使用过滤器/动作修改这些部分(我们都喜欢WP正是因为它,对吗?)