【发布时间】:2015-12-01 02:01:38
【问题描述】:
我正在使用 WordPress Sage Starter 主题 (https://roots.io/sage/)。它使用命名空间来声明函数。
我的 lib/extras.php 文件中有一个函数 (my_function_cmets) 用于修改 cmets 标记。这个文件有这个命名空间:命名空间Roots\Sage\Extras; 现在我需要将该函数用作另一个文件 templates/cmets.php 中的回调,如下所示:
<?php wp_list_comments(array('style' => 'ol',
'short_ping' => true,
'avatar_size' => 60,
'type' => 'comment',
'callback' => 'my_function_comments',
)); ?>
当然,my_function_cmets 不在此文件中,所以我编写了对 wp_list_cmets 的调用,如下所示:
<?php use Roots\Sage\Extras; ?>
<?php wp_list_comments(array('style' => 'ol',
'short_ping' => true,
'avatar_size' => 60,
'type' => 'comment',
'callback' => 'Extras\my_function_comments',
)); ?>
好的,这个回调函数显然是错误的,但我不知道如何编写它才能正确调用它。
也许有人可以帮我解决这个问题。
谢谢!
附言。命名空间相关文档可在此处找到(命名空间部分):https://roots.io/upping-php-requirements-in-your-wordpress-themes-and-plugins/。也许这将有助于回答我的问题。
【问题讨论】:
-
函数与命名空间声明无关,只有类(及其方法)。如果你
included 函数所在的文件,并且如果它在全局范围内,那么它是可访问的。但如果它是一个方法,那么您应该看到它的可访问性属性(如果是静态的,则为Extras\Class::my_function_comments。如果不是,则为Extras\Class->my_function_comments) -
在回调中使用完整的命名空间(在字符串内部)。当 wordpress 执行回调时需要命名空间,而不是在声明它时。您可以省略带有“使用”的行。
-
谢谢你们!!我会尝试发布解决方案。谢谢!
-
该函数不在类中,而是在具有命名空间的文件中。 @WeSee 选项解决了我的问题。我会发布一个解决方案让大家知道。